mirror of https://github.com/getdnsapi/getdns.git
Reference event_info directly
This commit is contained in:
parent
7b6b0ff642
commit
e4eddca259
|
@ -48,7 +48,7 @@ find_event(_getdns_eventloop_info** events, int id)
|
||||||
return ev;
|
return ev;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static _getdns_eventloop_info *
|
||||||
add_event(struct mem_funcs *mf, _getdns_eventloop_info** events,
|
add_event(struct mem_funcs *mf, _getdns_eventloop_info** events,
|
||||||
int id, getdns_eventloop_event *event, uint64_t timeout_time)
|
int id, getdns_eventloop_event *event, uint64_t timeout_time)
|
||||||
{
|
{
|
||||||
|
@ -60,6 +60,7 @@ add_event(struct mem_funcs *mf, _getdns_eventloop_info** events,
|
||||||
myevent->event = event;
|
myevent->event = event;
|
||||||
myevent->timeout_time = timeout_time;
|
myevent->timeout_time = timeout_time;
|
||||||
HASH_ADD_INT(*events, id, myevent);
|
HASH_ADD_INT(*events, id, myevent);
|
||||||
|
return myevent;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -132,8 +133,7 @@ poll_eventloop_schedule(getdns_eventloop *loop,
|
||||||
if (fd_event) {
|
if (fd_event) {
|
||||||
delete_event(mf, &poll_loop->fd_events, fd_event);
|
delete_event(mf, &poll_loop->fd_events, fd_event);
|
||||||
}
|
}
|
||||||
event->ev = (void *) (intptr_t) (fd + 1);
|
event->ev = add_event(mf, &poll_loop->fd_events, fd, event, get_now_plus(timeout));
|
||||||
add_event(mf, &poll_loop->fd_events, fd, event, get_now_plus(timeout));
|
|
||||||
|
|
||||||
DEBUG_SCHED( "scheduled read/write at fd %d\n", fd);
|
DEBUG_SCHED( "scheduled read/write at fd %d\n", fd);
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
|
@ -152,8 +152,7 @@ poll_eventloop_schedule(getdns_eventloop *loop,
|
||||||
}
|
}
|
||||||
for (i = poll_loop->timeout_id + 1; i != poll_loop->timeout_id; i++) {
|
for (i = poll_loop->timeout_id + 1; i != poll_loop->timeout_id; i++) {
|
||||||
if (find_event(&poll_loop->timeout_events, i) == NULL) {
|
if (find_event(&poll_loop->timeout_events, i) == NULL) {
|
||||||
event->ev = (void *) (intptr_t) (i + 1);
|
event->ev = add_event(mf, &poll_loop->timeout_events, i, event, get_now_plus(timeout));
|
||||||
add_event(mf, &poll_loop->timeout_events, i, event, get_now_plus(timeout));
|
|
||||||
|
|
||||||
DEBUG_SCHED( "scheduled timeout at slot %d\n", (int)i);
|
DEBUG_SCHED( "scheduled timeout at slot %d\n", (int)i);
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
|
@ -168,46 +167,20 @@ poll_eventloop_clear(getdns_eventloop *loop, getdns_eventloop_event *event)
|
||||||
{
|
{
|
||||||
_getdns_poll_eventloop *poll_loop = (_getdns_poll_eventloop *)loop;
|
_getdns_poll_eventloop *poll_loop = (_getdns_poll_eventloop *)loop;
|
||||||
struct mem_funcs *mf = &poll_loop->mf;
|
struct mem_funcs *mf = &poll_loop->mf;
|
||||||
ssize_t i;
|
|
||||||
|
|
||||||
if (!loop || !event)
|
if (!loop || !event)
|
||||||
return GETDNS_RETURN_INVALID_PARAMETER;
|
return GETDNS_RETURN_INVALID_PARAMETER;
|
||||||
|
|
||||||
DEBUG_SCHED( "%s(loop: %p, event: %p)\n", __FUNC__, (void *)loop, (void *)event);
|
DEBUG_SCHED( "%s(loop: %p, event: %p)\n", __FUNC__, (void *)loop, (void *)event);
|
||||||
|
|
||||||
i = (intptr_t)event->ev - 1;
|
assert(event->ev);
|
||||||
if (i < 0
|
|
||||||
#ifdef HAVE_GETRLIMIT
|
|
||||||
|| i > poll_loop->max_fds
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
return GETDNS_RETURN_GENERIC_ERROR;
|
|
||||||
}
|
|
||||||
if (event->timeout_cb && !event->read_cb && !event->write_cb) {
|
|
||||||
_getdns_eventloop_info* timeout_event = find_event(&poll_loop->timeout_events, i);
|
|
||||||
#if defined(SCHED_DEBUG) && SCHED_DEBUG
|
|
||||||
if (timeout_event && timeout_event->event != event)
|
|
||||||
DEBUG_SCHED( "ERROR: Different/wrong event present at "
|
|
||||||
"timeout slot: %p!\n"
|
|
||||||
, (void *)timeout_event);
|
|
||||||
|
|
||||||
#endif
|
delete_event(mf,
|
||||||
if (timeout_event) {
|
( event->timeout_cb && !event->read_cb && !event->write_cb
|
||||||
delete_event(mf, &poll_loop->timeout_events, timeout_event);
|
? &poll_loop->timeout_events : &poll_loop->fd_events
|
||||||
}
|
), event->ev);
|
||||||
} else {
|
|
||||||
_getdns_eventloop_info* fd_event = find_event(&poll_loop->fd_events, i);
|
|
||||||
#if defined(SCHED_DEBUG) && SCHED_DEBUG
|
|
||||||
if (fd_event && fd_event->event != event)
|
|
||||||
DEBUG_SCHED( "ERROR: Different/wrong event present at "
|
|
||||||
"fd slot: %p!\n"
|
|
||||||
, (void *)fd_event);
|
|
||||||
#endif
|
|
||||||
if (fd_event) {
|
|
||||||
delete_event(mf, &poll_loop->fd_events, fd_event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
event->ev = NULL;
|
event->ev = NULL;
|
||||||
|
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +260,7 @@ poll_eventloop_run_once(getdns_eventloop *loop, int blocking)
|
||||||
|
|
||||||
HASH_ITER(hh, poll_loop->timeout_events, s, tmp) {
|
HASH_ITER(hh, poll_loop->timeout_events, s, tmp) {
|
||||||
if (now > s->timeout_time)
|
if (now > s->timeout_time)
|
||||||
add_event(mf, &timeout_timeout_cbs, s->id, s->event, s->timeout_time);
|
(void) add_event(mf, &timeout_timeout_cbs, s->id, s->event, s->timeout_time);
|
||||||
else if (s->timeout_time < timeout)
|
else if (s->timeout_time < timeout)
|
||||||
timeout = s->timeout_time;
|
timeout = s->timeout_time;
|
||||||
}
|
}
|
||||||
|
@ -371,7 +344,7 @@ poll_eventloop_run_once(getdns_eventloop *loop, int blocking)
|
||||||
if (s->event &&
|
if (s->event &&
|
||||||
s->event->timeout_cb &&
|
s->event->timeout_cb &&
|
||||||
now > s->timeout_time)
|
now > s->timeout_time)
|
||||||
add_event(mf, &fd_timeout_cbs, s->id, s->event, s->timeout_time);
|
(void) add_event(mf, &fd_timeout_cbs, s->id, s->event, s->timeout_time);
|
||||||
}
|
}
|
||||||
/* this is in case the timeout callback deletes the event
|
/* this is in case the timeout callback deletes the event
|
||||||
and thus messes with the iteration */
|
and thus messes with the iteration */
|
||||||
|
@ -385,7 +358,7 @@ poll_eventloop_run_once(getdns_eventloop *loop, int blocking)
|
||||||
if (s->event &&
|
if (s->event &&
|
||||||
s->event->timeout_cb &&
|
s->event->timeout_cb &&
|
||||||
now > s->timeout_time)
|
now > s->timeout_time)
|
||||||
add_event(mf, &timeout_timeout_cbs, s->id, s->event, s->timeout_time);
|
(void) add_event(mf, &timeout_timeout_cbs, s->id, s->event, s->timeout_time);
|
||||||
}
|
}
|
||||||
/* this is in case the timeout callback deletes the event
|
/* this is in case the timeout callback deletes the event
|
||||||
and thus messes with the iteration */
|
and thus messes with the iteration */
|
||||||
|
|
Loading…
Reference in New Issue