e->flags & (EV_RD|EV_WR|EV_ERR|EV_HUP);
e->__poll_idx = evb->lpfd;
evb->lpfd++;
- }
+ } else
+ e->__poll_idx = -1;
if (e->timeout != 0.0) {
e->__when += ev_now() + e->timeout;
e->__evb = evb;
e->__binheap_idx = 0;
e->__privflags = 0;
- e->__poll_idx = -1;
if (e->fd < 0)
TAILQ_INSERT_TAIL(&evb->events, e, __list);
else
CHECK_OBJ_NOTNULL(evb, EVBASE_MAGIC);
do
- i = ev_schedule(evb);
+ i = ev_schedule_one(evb);
while (i == 1);
return (i);
}
i = e->callback(e, 0);
if (i) {
ev_del(evb, e);
+ free(e);
} else {
e->__when += t + e->timeout;
binheap_delete(evb->binheap, 0);
assert(pfd->events == e->flags);
if (!pfd->revents)
continue;
+printf("Call %p %s (%u)\n", e, e->name, pfd->revents);
j = e->callback(e, pfd->revents);
+printf("Back from %p %s (%u)\n", e, e->name, pfd->revents);
i--;
if (evb->disturbed) {
TAILQ_FOREACH(e2, &evb->events, __list)
e2 = TAILQ_NEXT(e, __list);
evb->disturbed = 0;
}
- if (j)
+ if (j) {
ev_del(evb, e);
+ free(e);
+ }
}
return (1);
}