summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-02-20 23:41:45 +0000
committerNick Mathewson <nickm@torproject.org>2004-02-20 23:41:45 +0000
commit67a273962a3485610fc8eeeb0a3f639d6df53478 (patch)
treeacd5259f870b6268eb8102d5135364d14566e670
parentfd4dc9de39e5f86cfebdf73abd10a718231274fb (diff)
downloadtor-67a273962a3485610fc8eeeb0a3f639d6df53478.tar.gz
tor-67a273962a3485610fc8eeeb0a3f639d6df53478.zip
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.c2
-rw-r--r--src/common/fakepoll.h27
-rw-r--r--src/or/main.c2
-rw-r--r--src/or/or.h6
4 files changed, 24 insertions, 13 deletions
diff --git a/src/common/fakepoll.c b/src/common/fakepoll.c
index f9e044eaf1..4465b5101e 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 61959d6c92..93e287925d 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 98a83e8042..511df7763f 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 a293e6f010..980637305c 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