From b6e6b7101b43040632d3d171ec465086ea188f44 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 20 Feb 2007 18:34:18 +0000 Subject: 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 --- src/common/compat.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/common') diff --git a/src/common/compat.c b/src/common/compat.c index d9df8892a5..b06ac414b0 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -82,6 +82,9 @@ const char compat_c_id[] = #ifdef HAVE_PTHREAD_H #include #endif +#ifdef HAVE_SIGNAL_H +#include +#endif #ifdef HAVE_UTIME_H #include #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); -- cgit v1.2.3-54-g00ecf