Browse Source

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
Felix von Leitner 13 years ago
parent
commit
a22dbda5f7
  1. 4
      io/io_fd.c
  2. 6
      io/io_timeouted.c
  3. 5
      io_internal.h

4
io/io_fd.c

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

6
io/io_timeouted.c

@ -11,8 +11,12 @@ int64 io_timeouted() {
e=array_get(&io_fds,sizeof(io_entry),ptr);
if (!e) return -1;
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;
}
}
ptr=-1; /* this is for really pathological cases, where more
connections come in all the time and so the timeout

5
io_internal.h

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

Loading…
Cancel
Save