diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-05-24 17:23:10 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-05-24 17:23:10 +0000 |
commit | a6d2f877f516c9747282e5716d5e774b0bc06d19 (patch) | |
tree | adca81f9db30b5cdcb44e9ab85ec52ed9f72c12f /src/or | |
parent | 5dcac14bab7d74745cb0b5bfd9ea31f661c820e6 (diff) | |
download | tor-a6d2f877f516c9747282e5716d5e774b0bc06d19.tar.gz tor-a6d2f877f516c9747282e5716d5e774b0bc06d19.zip |
r12928@catbus: nickm | 2007-05-24 13:23:07 -0400
Backport 10307: Warn when using a version of libevent before 1.3b to run a server on osx or bsd: these versions of libevent interact badly with userspace threads.
svn:r10309
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/config.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/or/config.c b/src/or/config.c index f8d97eecc4..83fa0048c1 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -584,7 +584,7 @@ typedef enum { /* Note: we compare these, so it's important that "old" precede everything, * and that "other" come last. */ LE_OLD=0, LE_10C, LE_10D, LE_10E, LE_11, LE_11A, LE_11B, LE_12, LE_12A, - LE_13, LE_13A, + LE_13, LE_13A, LE_13B, LE_OTHER } le_version_t; static le_version_t decode_libevent_version(void); @@ -3832,6 +3832,7 @@ static const struct { { "1.2a", LE_12A }, { "1.3", LE_13 }, { "1.3a", LE_13A }, + { "1.3b", LE_13B }, { NULL, LE_OTHER } }; @@ -3858,10 +3859,11 @@ decode_libevent_version(void) static void check_libevent_version(const char *m, int server) { - int buggy = 0, iffy = 0, slow = 0; + int buggy = 0, iffy = 0, slow = 0, thread_unsafe = 0; le_version_t version; const char *v = event_get_version(); const char *badness = NULL; + const char *sad_os = ""; version = decode_libevent_version(); @@ -3894,7 +3896,26 @@ check_libevent_version(const char *m, int server) buggy = 1; } - if (buggy) { + /* Libevent versions before 1.3b do very badly on operating systems with + * user-space threading implementations. */ +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) + if (server && version < LE_13B) { + thread_unsafe = 1; + sad_os = "BSD variants" + } +#elif defined(__APPLE__) || defined(__darwin__) + if (server && version < LE_13B) { + thread_unsafe = 1; + sad_os = "Mac OS X"; + } +#endif + + if (thread_unsafe) { + log(LOG_WARN, LD_GENERAL, + "Libevent version %s often crashes when running a Tor server with %s. " + "Please use the latest version of libevent (1.3b or later)",v,sad_os); + badness = "BROKEN"; + } else if (buggy) { log(LOG_WARN, LD_GENERAL, "There are known bugs in using %s with libevent %s. " "Please use the latest version of libevent.", m, v); @@ -3911,9 +3932,6 @@ check_libevent_version(const char *m, int server) v,m); badness = "SLOW"; } - /* XXXX012 if libevent 1.3b comes out before 0.1.2.x, and it works, - * recomment an upgrade to everybody on BSD or OSX or anywhere with - * that flavor of pthreads. */ if (badness) { control_event_general_status(LOG_WARN, "BAD_LIBEVENT VERSION=%s METHOD=%s BADNESS=%s RECOVERED=NO", |