diff options
author | Nick Mathewson <nickm@torproject.org> | 2015-03-12 09:49:45 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-03-12 10:03:02 -0400 |
commit | 192ed944101174d775d27ac54002ee9bc2708080 (patch) | |
tree | f25cc3944da97e6a89494f0ae678c4d4927a8d16 /src/common/compat_pthreads.c | |
parent | 985687bc4f99b90ed88ccdbefc820260c299ff23 (diff) | |
download | tor-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.
Diffstat (limited to 'src/common/compat_pthreads.c')
-rw-r--r-- | src/common/compat_pthreads.c | 6 |
1 files changed, 5 insertions, 1 deletions
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(); } |