]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Use PTHREAD_CREATE_DETACHED macro instead of 1: fix Solaris crash
authorNick Mathewson <nickm@torproject.org>
Thu, 12 Mar 2015 13:49:45 +0000 (09:49 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 12 Mar 2015 14:03:02 +0000 (10:03 -0400)
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.

changes/bug9495_redux [new file with mode: 0644]
src/common/compat_pthreads.c

diff --git a/changes/bug9495_redux b/changes/bug9495_redux
new file mode 100644 (file)
index 0000000..74b0cdf
--- /dev/null
@@ -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".
index f4a6cad154e71f11685a9a28dbd36d1bcd994187..246076b276c9daa7bdbf8e821f92636f23981103 100644 (file)
@@ -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();
   }