From: Adam Dickmeiss Date: Thu, 14 Aug 2014 09:28:22 +0000 (+0000) Subject: event: do not poll unless IOCHAN flag is set X-Git-Tag: v1.7.1~1 X-Git-Url: http://git.indexdata.com/?p=pazpar2-moved-to-github.git;a=commitdiff_plain;h=a01504754a0c0be56029cf3edd169f9ceb7f0023 event: do not poll unless IOCHAN flag is set The connection handler goes not expect "except" bits unless it asks for it. Fixes infinite looping that sometimes happened when connections were closed. --- diff --git a/src/eventl.c b/src/eventl.c index 39c243a..1bcba5b 100644 --- a/src/eventl.c +++ b/src/eventl.c @@ -255,7 +255,7 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) { p->poll_offset = i; fds[i].client_data = p; - fds[i].fd = p->fd; + fds[i].fd = -1; fds[i].input_mask = 0; if (p->thread_users > 0) continue; @@ -269,6 +269,8 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) fds[i].input_mask |= yaz_poll_write; if (p->flags & EVENT_EXCEPT) fds[i].input_mask |= yaz_poll_except; + if (fds[i].input_mask) + fds[i].fd = p->fd; } yaz_log(man->log_level, "yaz_poll begin nofds=%d", no_fds); res = yaz_poll(fds, no_fds, tv_sec, 0);