r11850@catbus: nickm | 2007-02-20 13:34:13 -0500

Apply patch from coderman: have posix subthreads mask out signals.  This could prevent some kinds of crashes when subthreads try to handle SIGPIPEs and die in the attempt.  Backport candidate.


svn:r9603
This commit is contained in:
Nick Mathewson 2007-02-20 18:34:18 +00:00
parent 986d0ac39b
commit b6e6b7101b
2 changed files with 12 additions and 0 deletions

View File

@ -39,6 +39,9 @@ Changes in version 0.1.2.8-alpha - 2007-??-??
- When EntryNodes are configured, rebuild the guard list to contain, in - When EntryNodes are configured, rebuild the guard list to contain, in
order: the EntryNodes that were guards before; the rest of the order: the EntryNodes that were guards before; the rest of the
EntryNodes; the nodes that were guards before. EntryNodes; the nodes that were guards before.
- Mask out all signals in sub-threads; only the libevent signal handler
should be processing them. This should prevent some crashes on some
machines using pthreads. (Patch from coderman.)
o Minor features (controller): o Minor features (controller):
- Warn the user when an application uses the obsolete binary v0 - Warn the user when an application uses the obsolete binary v0

View File

@ -82,6 +82,9 @@ const char compat_c_id[] =
#ifdef HAVE_PTHREAD_H #ifdef HAVE_PTHREAD_H
#include <pthread.h> #include <pthread.h>
#endif #endif
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
#ifdef HAVE_UTIME_H #ifdef HAVE_UTIME_H
#include <utime.h> #include <utime.h>
#endif #endif
@ -996,6 +999,12 @@ tor_pthread_helper_fn(void *_data)
tor_pthread_data_t *data = _data; tor_pthread_data_t *data = _data;
void (*func)(void*); void (*func)(void*);
void *arg; void *arg;
/* mask signals to worker threads to avoid SIGPIPE, etc */
sigset_t sigs;
/* We're in a subthread; don't handle any signals here. */
sigfillset(&sigs);
pthread_sigmask(SIG_SETMASK, &sigs, NULL);
func = data->func; func = data->func;
arg = data->data; arg = data->data;
tor_free(_data); tor_free(_data);