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.
This commit is contained in:
leitner 2009-04-25 19:09:27 +00:00
parent 49e8257931
commit 51202765fe
3 changed files with 12 additions and 3 deletions

View File

@ -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>

View File

@ -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 */

View File

@ -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__