From ceef5a42292f408f13d9ae41ee00132c92b814fd Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 20 Feb 2004 23:41:45 +0000 Subject: [PATCH] On OSX, decline to use the built-in select-baed poll wrapper, since it seems to sometimes not work. svn:r1114 --- trunk/src/common/fakepoll.c | 2 +- trunk/src/common/fakepoll.h | 29 +++++++++++++++++++++++------ trunk/src/or/main.c | 2 +- trunk/src/or/or.h | 6 ------ 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/trunk/src/common/fakepoll.c b/trunk/src/common/fakepoll.c index f9e044eaf1..4465b5101e 100644 --- a/trunk/src/common/fakepoll.c +++ b/trunk/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/trunk/src/common/fakepoll.h b/trunk/src/common/fakepoll.h index 61959d6c92..93e287925d 100644 --- a/trunk/src/common/fakepoll.h +++ b/trunk/src/common/fakepoll.h @@ -7,10 +7,27 @@ #include "orconfig.h" -#ifndef HAVE_POLL_H -#ifndef HAVE_SYS_POLL_H -#define USE_FAKE_POLL +#define POLL_NO_WARN +#if defined(HAVE_POLL_H) +#include +#elif defined(HAVE_SYS_POLL_H) +#include +#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 +#endif -int poll(struct pollfd *ufds, unsigned int nfds, int timeout); +int tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout); +#endif #endif -#endif -#endif diff --git a/trunk/src/or/main.c b/trunk/src/or/main.c index 98a83e8042..511df7763f 100644 --- a/trunk/src/or/main.c +++ b/trunk/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/trunk/src/or/or.h b/trunk/src/or/or.h index a293e6f010..980637305c 100644 --- a/trunk/src/or/or.h +++ b/trunk/src/or/or.h @@ -26,13 +26,7 @@ #include #endif #include "../common/torint.h" -#ifdef HAVE_SYS_POLL_H -#include -#elif HAVE_POLL_H -#include -#else #include "../common/fakepoll.h" -#endif #ifdef HAVE_SYS_TYPES_H #include /* Must be included before sys/stat.h for Ultrix */ #endif