/*
- * 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 <stdio.h>
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);
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)
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 */