>From 27097791ee5de99d52d513858b10d4e43ce0e33b Mon Sep 17 00:00:00 2001 From: Moritz Heidkamp Date: Mon, 4 Aug 2014 15:23:13 +0200 Subject: [PATCH] Invert poll(2) flag default To be on the safe side we now assume that poll(2) is available by default and define the NO_POSIX_POLL flag in case it isn't available on a platform. --- Makefile.aix | 1 - Makefile.android | 1 - Makefile.bsd | 1 - Makefile.cross-linux-mingw | 1 + Makefile.cygwin | 1 - Makefile.haiku | 1 - Makefile.hurd | 1 - Makefile.ios | 1 - Makefile.linux | 1 - Makefile.macosx | 1 - Makefile.mingw | 1 + Makefile.mingw-msys | 1 + Makefile.solaris | 1 - runtime.c | 14 ++++++------ scheduler.scm | 54 +++++++++++++++++++++++----------------------- 15 files changed, 37 insertions(+), 44 deletions(-) diff --git a/Makefile.aix b/Makefile.aix index 68b33b7..72e9715 100644 --- a/Makefile.aix +++ b/Makefile.aix @@ -74,7 +74,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_STDINT_H 1" >>$@ diff --git a/Makefile.android b/Makefile.android index ac72ee8..819587f 100644 --- a/Makefile.android +++ b/Makefile.android @@ -69,7 +69,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_STDINT_H 1" >>$@ diff --git a/Makefile.bsd b/Makefile.bsd index af28814..c69ea35 100644 --- a/Makefile.bsd +++ b/Makefile.bsd @@ -72,7 +72,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_SIGPROCMASK 1" >>$@ diff --git a/Makefile.cross-linux-mingw b/Makefile.cross-linux-mingw index 32a6f2f..6e4c34a 100644 --- a/Makefile.cross-linux-mingw +++ b/Makefile.cross-linux-mingw @@ -95,6 +95,7 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ + echo "#define NO_POSIX_POLL 1" >>$@ echo "#define HAVE_STDINT_H 1" >>$@ echo "#define HAVE_STDLIB_H 1" >>$@ echo "#define HAVE_STRERROR 1" >>$@ diff --git a/Makefile.cygwin b/Makefile.cygwin index 376f6b8..f499c90 100644 --- a/Makefile.cygwin +++ b/Makefile.cygwin @@ -89,7 +89,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_STDINT_H 1" >>$@ echo "#define HAVE_STDLIB_H 1" >>$@ diff --git a/Makefile.haiku b/Makefile.haiku index a1f5841..7eeec26 100644 --- a/Makefile.haiku +++ b/Makefile.haiku @@ -66,7 +66,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_SIGPROCMASK 1" >>$@ diff --git a/Makefile.hurd b/Makefile.hurd index 6a97db6..d2f9a1f 100644 --- a/Makefile.hurd +++ b/Makefile.hurd @@ -67,7 +67,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_SIGPROCMASK 1" >>$@ diff --git a/Makefile.ios b/Makefile.ios index 6f82e00..6c99c47 100644 --- a/Makefile.ios +++ b/Makefile.ios @@ -73,7 +73,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_SIGPROCMASK 1" >>$@ diff --git a/Makefile.linux b/Makefile.linux index 3f2aca1..c941821 100644 --- a/Makefile.linux +++ b/Makefile.linux @@ -67,7 +67,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_SIGPROCMASK 1" >>$@ diff --git a/Makefile.macosx b/Makefile.macosx index 9ce4682..033a43e 100644 --- a/Makefile.macosx +++ b/Makefile.macosx @@ -95,7 +95,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_SIGSETJMP 1" >>$@ echo "#define HAVE_SIGPROCMASK 1" >>$@ diff --git a/Makefile.mingw b/Makefile.mingw index 3d8cfba..9979028 100644 --- a/Makefile.mingw +++ b/Makefile.mingw @@ -87,6 +87,7 @@ chicken-config.h: chicken-defaults.h echo #define HAVE_LONG_LONG 1 >>$@ echo #define HAVE_MEMMOVE 1 >>$@ echo #define HAVE_MEMORY_H 1 >>$@ + echo #define NO_POSIX_POLL 1 >>$@ echo #define HAVE_STDINT_H 1 >>$@ echo #define HAVE_STDLIB_H 1 >>$@ echo #define HAVE_STRERROR 1 >>$@ diff --git a/Makefile.mingw-msys b/Makefile.mingw-msys index 9ec6750..d2417f7 100644 --- a/Makefile.mingw-msys +++ b/Makefile.mingw-msys @@ -89,6 +89,7 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ + echo "#define NO_POSIX_POLL 1" >>$@ echo "#define HAVE_STDINT_H 1" >>$@ echo "#define HAVE_STDLIB_H 1" >>$@ echo "#define HAVE_STRERROR 1" >>$@ diff --git a/Makefile.solaris b/Makefile.solaris index dc7afb2..9be873f 100644 --- a/Makefile.solaris +++ b/Makefile.solaris @@ -98,7 +98,6 @@ chicken-config.h: chicken-defaults.h echo "#define HAVE_LONG_LONG 1" >>$@ echo "#define HAVE_MEMMOVE 1" >>$@ echo "#define HAVE_MEMORY_H 1" >>$@ - echo "#define HAVE_POSIX_POLL 1" >>$@ echo "#define HAVE_SIGACTION 1" >>$@ echo "#define HAVE_STDINT_H 1" >>$@ echo "#define HAVE_STDLIB_H 1" >>$@ diff --git a/runtime.c b/runtime.c index 1a68906..5585c9b 100644 --- a/runtime.c +++ b/runtime.c @@ -64,7 +64,7 @@ #endif /* TODO: Include sys/select.h? Windows doesn't seem to have it... */ -#ifdef HAVE_POSIX_POLL +#ifndef NO_POSIX_POLL # include #endif @@ -4124,12 +4124,7 @@ C_regparm C_word C_fcall C_execute_shell_command(C_word string) */ C_regparm int C_fcall C_check_fd_ready(int fd) { -#ifdef HAVE_POSIX_POLL - struct pollfd ps; - ps.fd = fd; - ps.events = POLLIN; - return poll(&ps, 1, 0); -#else +#ifdef NO_POSIX_POLL fd_set in; struct timeval tm; int rv; @@ -4139,6 +4134,11 @@ C_regparm int C_fcall C_check_fd_ready(int fd) rv = select(fd + 1, &in, NULL, NULL, &tm); if(rv > 0) { rv = FD_ISSET(fd, &in) ? 1 : 0; } return rv; +#else + struct pollfd ps; + ps.fd = fd; + ps.events = POLLIN; + return poll(&ps, 1, 0); #endif } diff --git a/scheduler.scm b/scheduler.scm index f6e996f..ff5d80d 100644 --- a/scheduler.scm +++ b/scheduler.scm @@ -66,7 +66,33 @@ C_word C_msleep(C_word ms) { } #endif -#ifdef HAVE_POSIX_POLL +#ifdef NO_POSIX_POLL + +/* Shouldn't we include here? */ +static fd_set C_fdset_input, C_fdset_output; + +#define C_fd_input_ready(fd,pos) C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_input)) +#define C_fd_output_ready(fd,pos) C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_output)) + +C_inline int C_ready_fds_timeout(int to, double tm) { + struct timeval timeout; + timeout.tv_sec = tm / 1000; + timeout.tv_usec = fmod(tm, 1000) * 1000; + /* we use FD_SETSIZE, but really should use max fd */ + return select(FD_SETSIZE, &C_fdset_input, &C_fdset_output, NULL, to ? &timeout : NULL); +} + +C_inline void C_prepare_fdset(int length) { + FD_ZERO(&C_fdset_input); + FD_ZERO(&C_fdset_output); +} + +C_inline void C_fdset_add(int fd, int input, int output) { + if (input) FD_SET(fd, &C_fdset_input); + if (output) FD_SET(fd, &C_fdset_output); +} + +#else # include # include @@ -98,32 +124,6 @@ C_inline void C_fdset_add(int fd, int input, int output) { C_fdset_set[C_fdset_nfds].events = ((input ? POLLIN : 0) | (output ? POLLOUT : 0)); C_fdset_set[C_fdset_nfds++].fd = fd; } - -#else - -/* Shouldn't we include here? */ -static fd_set C_fdset_input, C_fdset_output; - -#define C_fd_input_ready(fd,pos) C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_input)) -#define C_fd_output_ready(fd,pos) C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_output)) - -C_inline int C_ready_fds_timeout(int to, double tm) { - struct timeval timeout; - timeout.tv_sec = tm / 1000; - timeout.tv_usec = fmod(tm, 1000) * 1000; - /* we use FD_SETSIZE, but really should use max fd */ - return select(FD_SETSIZE, &C_fdset_input, &C_fdset_output, NULL, to ? &timeout : NULL); -} - -C_inline void C_prepare_fdset(int length) { - FD_ZERO(&C_fdset_input); - FD_ZERO(&C_fdset_output); -} - -C_inline void C_fdset_add(int fd, int input, int output) { - if (input) FD_SET(fd, &C_fdset_input); - if (output) FD_SET(fd, &C_fdset_output); -} #endif EOF ) ) -- 2.1.0