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
This commit is contained in:
parent
5dcac14bab
commit
a6d2f877f5
|
@ -41,6 +41,8 @@ Changes in version 0.1.2.14 - 2007-05-23
|
|||
- When routers publish SVN revisions in their router descriptors,
|
||||
authorities now include those versions correctly in networkstatus
|
||||
documents.
|
||||
- Warn when using a version of libevent before 1.3b to run a server on
|
||||
OSX or BSD: these versions interact badly with userspace threads.
|
||||
|
||||
|
||||
Changes in version 0.1.2.13 - 2007-04-24
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue