diff options
author | Nick Mathewson <nickm@torproject.org> | 2004-02-20 23:41:45 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2004-02-20 23:41:45 +0000 |
commit | 67a273962a3485610fc8eeeb0a3f639d6df53478 (patch) | |
tree | acd5259f870b6268eb8102d5135364d14566e670 | |
parent | fd4dc9de39e5f86cfebdf73abd10a718231274fb (diff) | |
download | tor-67a273962a3485610fc8eeeb0a3f639d6df53478.tar tor-67a273962a3485610fc8eeeb0a3f639d6df53478.tar.gz |
On OSX, decline to use the built-in select-baed poll wrapper, since it seems to sometimes not work.
svn:r1114
-rw-r--r-- | src/common/fakepoll.c | 2 | ||||
-rw-r--r-- | src/common/fakepoll.h | 27 | ||||
-rw-r--r-- | src/or/main.c | 2 | ||||
-rw-r--r-- | src/or/or.h | 6 |
4 files changed, 24 insertions, 13 deletions
diff --git a/src/common/fakepoll.c b/src/common/fakepoll.c index f9e044eaf..4465b5101 100644 --- a/src/common/fakepoll.c +++ b/src/common/fakepoll.c @@ -30,7 +30,7 @@ #include "util.h" int -poll(struct pollfd *ufds, unsigned int nfds, int timeout) +tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout) { int idx, maxfd, fd; int r; diff --git a/src/common/fakepoll.h b/src/common/fakepoll.h index 61959d6c9..93e287925 100644 --- a/src/common/fakepoll.h +++ b/src/common/fakepoll.h @@ -7,10 +7,27 @@ #include "orconfig.h" -#ifndef HAVE_POLL_H -#ifndef HAVE_SYS_POLL_H +#define POLL_NO_WARN + +#if defined(HAVE_POLL_H) +#include <poll.h> +#elif defined(HAVE_SYS_POLL_H) +#include <sys/poll.h> +#endif + +/* If _POLL_EMUL_H_ is defined, then poll is just a just a thin wrapper around + * select. On Mac OS 10.3, this wrapper is kinda flakey, and we should + * use our own. + */ +#if (defined(HAVE_POLL_H)||defined(HAVE_SYS_POLL_H)) && !defined(_POLL_EMUL_H_) +#define tor_poll poll +#else #define USE_FAKE_POLL +#endif + +#ifdef USE_FAKE_POLL +#ifndef _POLL_EMUL_H_ struct pollfd { int fd; short events; @@ -23,9 +40,9 @@ struct pollfd { #define POLLERR 0x0008 #define POLLHUP 0x0010 #define POLLNVAL 0x0020 - -int poll(struct pollfd *ufds, unsigned int nfds, int timeout); - #endif + +int tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout); #endif + #endif diff --git a/src/or/main.c b/src/or/main.c index 98a83e804..511df7763 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -520,7 +520,7 @@ static int do_main_loop(void) { timeout = prepare_for_poll(); /* poll until we have an event, or the second ends */ - poll_result = poll(poll_array, nfds, timeout); + poll_result = tor_poll(poll_array, nfds, timeout); /* let catch() handle things like ^c, and otherwise don't worry about it */ if(poll_result < 0) { diff --git a/src/or/or.h b/src/or/or.h index a293e6f01..980637305 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -26,13 +26,7 @@ #include <ctype.h> #endif #include "../common/torint.h" -#ifdef HAVE_SYS_POLL_H -#include <sys/poll.h> -#elif HAVE_POLL_H -#include <poll.h> -#else #include "../common/fakepoll.h" -#endif #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> /* Must be included before sys/stat.h for Ultrix */ #endif |