mirror of https://github.com/getdnsapi/getdns.git
Fix correctly tracking of outstanding events
This commit is contained in:
parent
f61d2ae262
commit
c9de395b44
|
@ -72,8 +72,16 @@ getdns_mini_event_run(getdns_eventloop *loop)
|
||||||
if (ext->n_events == 0 || getdns_mini_event_settime(ext) < 0)
|
if (ext->n_events == 0 || getdns_mini_event_settime(ext) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
do (void) getdns_handle_timeouts(ext->base, &ext->time_tv, &wait);
|
do {
|
||||||
while (!getdns_handle_select(ext->base, &wait) && ext->n_events);
|
(void) getdns_handle_timeouts(ext->base, &ext->time_tv, &wait);
|
||||||
|
|
||||||
|
if (!ext->n_events)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (getdns_handle_select(ext->base, &wait))
|
||||||
|
break;
|
||||||
|
|
||||||
|
} while (ext->n_events);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -86,15 +94,14 @@ getdns_mini_event_run_once(getdns_eventloop *loop, int blocking)
|
||||||
if (blocking) {
|
if (blocking) {
|
||||||
if (getdns_mini_event_settime(ext) < 0)
|
if (getdns_mini_event_settime(ext) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
getdns_handle_timeouts(ext->base, &ext->time_tv, &wait);
|
getdns_handle_timeouts(ext->base, &ext->time_tv, &wait);
|
||||||
(void) getdns_handle_select(ext->base, &wait);
|
if (getdns_handle_select(ext->base, &wait) < 0)
|
||||||
} else {
|
|
||||||
if (getdns_handle_select(ext->base, &immediately) < 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
getdns_handle_timeouts(ext->base, &ext->time_tv, &wait);
|
} else if (getdns_handle_select(ext->base, &immediately) < 0)
|
||||||
}
|
return;
|
||||||
|
|
||||||
|
getdns_handle_timeouts(ext->base, &ext->time_tv, &wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
static getdns_return_t
|
static getdns_return_t
|
||||||
|
@ -186,6 +193,7 @@ getdns_mini_event_init(getdns_context *context, getdns_mini_event *ext)
|
||||||
if (!ext)
|
if (!ext)
|
||||||
return GETDNS_RETURN_INVALID_PARAMETER;
|
return GETDNS_RETURN_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
ext->n_events = 0;
|
||||||
ext->loop.vmt = &getdns_mini_event_vmt;
|
ext->loop.vmt = &getdns_mini_event_vmt;
|
||||||
ext->base = getdns_event_init(&ext->time_secs, &ext->time_tv);
|
ext->base = getdns_event_init(&ext->time_secs, &ext->time_tv);
|
||||||
if (!ext->base)
|
if (!ext->base)
|
||||||
|
|
Loading…
Reference in New Issue