[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r9603: Apply patch from coderman: have posix subthreads mask out si (in tor/trunk: . src/common)
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] r9603: Apply patch from coderman: have posix subthreads mask out si (in tor/trunk: . src/common)
- From: nickm@xxxxxxxx
- Date: Tue, 20 Feb 2007 13:34:19 -0500 (EST)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Tue, 20 Feb 2007 13:34:29 -0500
- Reply-to: or-talk@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Author: nickm
Date: 2007-02-20 13:34:18 -0500 (Tue, 20 Feb 2007)
New Revision: 9603
Modified:
   tor/trunk/
   tor/trunk/ChangeLog
   tor/trunk/src/common/compat.c
Log:
 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.
Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r11850] on 8246c3cf-6607-4228-993b-4d95d33730f1
Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog	2007-02-19 14:53:56 UTC (rev 9602)
+++ tor/trunk/ChangeLog	2007-02-20 18:34:18 UTC (rev 9603)
@@ -39,6 +39,9 @@
     - 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
Modified: tor/trunk/src/common/compat.c
===================================================================
--- tor/trunk/src/common/compat.c	2007-02-19 14:53:56 UTC (rev 9602)
+++ tor/trunk/src/common/compat.c	2007-02-20 18:34:18 UTC (rev 9603)
@@ -82,6 +82,9 @@
 #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_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);