the #define extern hack in io_fd.c also included time.h, fix that

catch case in timeout loop where we have something to report on an fd;
in that case do not report a timeout but let the other event get through
first.
master
leitner 16 years ago
parent 49e8257931
commit 51202765fe

@ -1,8 +1,8 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#include <errno.h> #include <errno.h>
#define extern #define my_extern
#include "io_internal.h" #include "io_internal.h"
#undef extern #undef my_extern
#include "byte.h" #include "byte.h"
#ifdef HAVE_SIGIO #ifdef HAVE_SIGIO
#include <signal.h> #include <signal.h>

@ -11,9 +11,13 @@ int64 io_timeouted() {
e=array_get(&io_fds,sizeof(io_entry),ptr); e=array_get(&io_fds,sizeof(io_entry),ptr);
if (!e) return -1; if (!e) return -1;
for (;ptr<alen; ++ptr,++e) { for (;ptr<alen; ++ptr,++e) {
if (e->inuse && e->timeout.sec.x && taia_less(&e->timeout,&now)) if (e->inuse && e->timeout.sec.x && taia_less(&e->timeout,&now)) {
/* we have a timeout */
if ((e->canread&&e->wantread) || (e->canwrite&&e->wantwrite))
continue; /* don't count it if we can signal something else */
return ptr; return ptr;
} }
}
ptr=-1; /* this is for really pathological cases, where more ptr=-1; /* this is for really pathological cases, where more
connections come in all the time and so the timeout connections come in all the time and so the timeout
handling does not trigger initially */ handling does not trigger initially */

@ -1,3 +1,8 @@
#ifndef my_extern
#define my_extern extern
#endif
#undef my_extern
#include "io.h" #include "io.h"
#include "array.h" #include "array.h"
#ifdef __MINGW32__ #ifdef __MINGW32__

Loading…
Cancel
Save