X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Feventl.c;h=541bba4b5bde5ee2e12021bbdfb73b639bbc4c51;hb=854bc0025cf4f8cbd509e2d1de7d2f8a1ea126ac;hp=aade89bc9484b3786285f724b53498cb31c6b4b8;hpb=b81a371f23d16b616e6f7355ec7345cf8a482511;p=yaz-moved-to-github.git diff --git a/server/eventl.c b/server/eventl.c index aade89b..541bba4 100644 --- a/server/eventl.c +++ b/server/eventl.c @@ -1,9 +1,9 @@ /* - * Copyright (c) 1995-2001, Index Data + * Copyright (c) 1995-2003, Index Data * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * - * $Id: eventl.c,v 1.31 2001-10-05 14:43:22 adam Exp $ + * $Id: eventl.c,v 1.35 2003-02-12 15:06:43 adam Exp $ */ #include @@ -60,6 +60,11 @@ int event_loop(IOCHAN *iochans) static struct timeval nullto = {0, 0}, to; struct timeval *timeout; + if (statserv_must_terminate()) + { + for (p = *iochans; p; p = p->next) + p->force_event = EVENT_TIMEOUT; + } FD_ZERO(&in); FD_ZERO(&out); FD_ZERO(&except); @@ -69,6 +74,8 @@ int event_loop(IOCHAN *iochans) max = 0; for (p = *iochans; p; p = p->next) { + yaz_log(LOG_LOG, "fd=%d flags=%d force_event=%d", + p->fd, p->flags, p->force_event); if (p->force_event) timeout = &nullto; /* polling select */ if (p->flags & EVENT_INPUT) @@ -80,11 +87,20 @@ int event_loop(IOCHAN *iochans) if (p->fd > max) max = p->fd; } + yaz_log(LOG_LOG, "select start"); res = YAZ_EV_SELECT(max + 1, &in, &out, &except, timeout); + yaz_log(LOG_LOG, "select end"); if (res < 0) { - if (errno == EINTR) - continue; + if (yaz_errno() == EINTR) + { + if (statserv_must_terminate()) + { + for (p = *iochans; p; p = p->next) + p->force_event = EVENT_TIMEOUT; + } + continue; + } else { /* Destroy the first member in the chain, and try again */