if (!tv_io) continue;
inter_maxtoabs(tv_io,tvbuf,now,qu->timeout);
} else {
- if (!act) continue;
+ if (!act) {
+ tvbuf.tv_sec= 0;
+ tvbuf.tv_usec= 0;
+ *tv_io= &tvbuf;
+ return;
+ }
LIST_UNLINK(ads->timew,qu);
if (qu->state != query_tosend) {
adns__query_fail(qu,adns_s_timeout);
qu= *query_io;
if (!qu) {
- if (!ads->output.head) return EAGAIN;
- qu= ads->output.head;
+ if (ads->output.head) {
+ qu= ads->output.head;
+ } else if (ads->timew.head) {
+ return EAGAIN;
+ } else {
+ return ESRCH;
+ }
} else {
if (qu->id>=0) return EAGAIN;
}