summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-03-12 09:49:45 -0400
committerNick Mathewson <nickm@torproject.org>2015-03-12 10:03:02 -0400
commit192ed944101174d775d27ac54002ee9bc2708080 (patch)
treef25cc3944da97e6a89494f0ae678c4d4927a8d16
parent985687bc4f99b90ed88ccdbefc820260c299ff23 (diff)
downloadtor-192ed944101174d775d27ac54002ee9bc2708080.tar.gz
tor-192ed944101174d775d27ac54002ee9bc2708080.zip
Use PTHREAD_CREATE_DETACHED macro instead of 1: fix Solaris crash
When calling pthread_attr_setdetachstate, we were using 1 as the argument. But the pthreads documentation says that you have to say PTHREAD_CREATE_DETACH, which on Solaris is apparently 0x40. Calling pthread_attr_setdetachstate with 1 crashes on Solaris with FLTBOUNDS. (Because we're so late in the release cycle, I made the code define PTHREAD_CREATE_DETACHED if it doesn't exist, so we aren't likely to break any other platforms.) This bug was introduced when we made threading mandatory in 0.2.6.1-alpha; previously, we had force-disabled threading on Solaris. See #9495 discussion.
-rw-r--r--changes/bug9495_redux4
-rw-r--r--src/common/compat_pthreads.c6
2 files changed, 9 insertions, 1 deletions
diff --git a/changes/bug9495_redux b/changes/bug9495_redux
new file mode 100644
index 0000000000..74b0cdf2a8
--- /dev/null
+++ b/changes/bug9495_redux
@@ -0,0 +1,4 @@
+ o Major bugfixes (portability):
+ - Do not crash on startup when running on Solaris. Fixes a bug
+ related to our fix for 9495; bugfix on 0.2.6.1-alpha. Reported
+ by "ruebezahl".
diff --git a/src/common/compat_pthreads.c b/src/common/compat_pthreads.c
index f4a6cad154..246076b276 100644
--- a/src/common/compat_pthreads.c
+++ b/src/common/compat_pthreads.c
@@ -279,7 +279,11 @@ tor_threads_init(void)
pthread_mutexattr_init(&attr_recursive);
pthread_mutexattr_settype(&attr_recursive, PTHREAD_MUTEX_RECURSIVE);
tor_assert(0==pthread_attr_init(&attr_detached));
- tor_assert(0==pthread_attr_setdetachstate(&attr_detached, 1));
+#ifndef PTHREAD_CREATE_DETACHED
+#define PTHREAD_CREATE_DETACHED 1
+#endif
+ tor_assert(0==pthread_attr_setdetachstate(&attr_detached,
+ PTHREAD_CREATE_DETACHED));
threads_initialized = 1;
set_main_thread();
}