From 09a2ec0192338fff8e75d03558e3ed8150d9444e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 6 Oct 2006 15:29:33 +0000 Subject: [PATCH] r9107@Kushana: nickm | 2006-10-06 02:14:02 -0400 When eventdns is enabled, we can allow machines with thread-unsafe resolver functions to build multithreaded anyway. svn:r8608 --- ChangeLog | 3 +++ configure.in | 52 +++++++++++++++++++++++++++------------------------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index ae49719207..6542975746 100644 --- a/ChangeLog +++ b/ChangeLog @@ -88,6 +88,9 @@ Changes in version 0.1.2.2-alpha - 2006-10-?? - Just because your DirPort is open doesn't mean people should be able to remotely teach you about hidden service descriptors. Now only accept rendezvous posts if you've got HSAuthoritativeDir set. + - When eventdns is enabled, allow multithreaded builds on NetBSD and + OpenBSD. (We had previously disabled threads on these platforms + because they didn't have working thread-safe resolver functions) o Major bugfixes, other: - Avoiding crashing on race condition in dns.c: diff --git a/configure.in b/configure.in index 860cf2abe4..2c3447a32f 100644 --- a/configure.in +++ b/configure.in @@ -19,31 +19,6 @@ AC_ARG_ENABLE(debug, CFLAGS="$CFLAGS -g" fi]) -AC_ARG_ENABLE(threads, - AC_HELP_STRING(--disable-threads, disable multi-threading support)) - -if test x$enable_threads = x; then - case $host in - *-*-netbsd* | *-*-openbsd* ) - # Don't try multithreading on netbsd -- there is no threadsafe DNS - # lookup function there. - AC_MSG_NOTICE([You are running OpenBSD or NetBSD; I am assuming that -getaddrinfo is not threadsafe here, so I will disable threads.]) - enable_threads="no";; - *-*-solaris* ) - # Don't try multithreading on solaris -- cpuworkers seem to lock. - AC_MSG_NOTICE([You are running Solaris; Sometimes threading makes -cpu workers lock up here, so I will disable threads.]) - enable_threads="no";; - *) - enable_threads="yes";; - esac -fi - -if test $enable_threads = "yes"; then - AC_DEFINE(ENABLE_THREADS, 1, [Defined if we will try to use multithreading]) -fi - AC_ARG_ENABLE(eventdns, AC_HELP_STRING(--enable-eventdns, enable asynchronous dns module), [case "${enableval}" in @@ -64,6 +39,33 @@ AC_ARG_ENABLE(transparent, *) AC_MSG_ERROR(bad value for --enable-transparent) ;; esac], [transparent=true]) +AC_ARG_ENABLE(threads, + AC_HELP_STRING(--disable-threads, disable multi-threading support)) + +if test x$enable_threads = x; then + case $host in + *-*-netbsd* | *-*-openbsd* ) + # Don't try multithreading on netbsd -- there is no threadsafe DNS + # lookup function there. + if test x$eventdns != xtrue; then + AC_MSG_NOTICE([You are running OpenBSD or NetBSD; I am assuming that +getaddrinfo is not threadsafe here, so I will disable threads.]) + enable_threads="no" + fi ;; + *-*-solaris* ) + # Don't try multithreading on solaris -- cpuworkers seem to lock. + AC_MSG_NOTICE([You are running Solaris; Sometimes threading makes +cpu workers lock up here, so I will disable threads.]) + enable_threads="no";; + *) + enable_threads="yes";; + esac +fi + +if test $enable_threads = "yes"; then + AC_DEFINE(ENABLE_THREADS, 1, [Defined if we will try to use multithreading]) +fi + case $host in *-*-solaris* ) AC_DEFINE(_REENTRANT, 1, [Define on some platforms to activate x_r() functions in time.h])