Commit b6e6b710 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

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
parent 986d0ac3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -39,6 +39,9 @@ Changes in version 0.1.2.8-alpha - 2007-??-??
    - When EntryNodes are configured, rebuild the guard list to contain, in
      order: the EntryNodes that were guards before; the rest of the
      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):
    - Warn the user when an application uses the obsolete binary v0
+9 −0
Original line number Diff line number Diff line
@@ -82,6 +82,9 @@ const char compat_c_id[] =
#ifdef HAVE_PTHREAD_H
#include <pthread.h>
#endif
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
#ifdef HAVE_UTIME_H
#include <utime.h>
#endif
@@ -996,6 +999,12 @@ tor_pthread_helper_fn(void *_data)
  tor_pthread_data_t *data = _data;
  void (*func)(void*);
  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;
  arg = data->data;
  tor_free(_data);