softsig-dont-block-critical-signals-20030411
authorDerrick Brashear <shadow@dementia.org>
Fri, 11 Apr 2003 18:50:12 +0000 (18:50 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 11 Apr 2003 18:50:12 +0000 (18:50 +0000)
blocking these seems to prevent all threads from dying when the kernel
gives e.g. SIGSEGV to one of the processes. since softsig is to protect us
from what signals we handle might do in the handler, this should be fine

src/util/pthread_nosigs.h

index 8f84fc2..fe74772 100644 (file)
 #else
 #define AFS_SET_SIGMASK pthread_sigmask
 #endif
+#ifdef SIGSEGV 
+#define _SETSEGV sigdelset(&i_tset, SIGSEGV); 
+#else
+#define _SETSEGV ;
+#endif 
+#ifdef SIGBUS 
+#define _SETBUS sigdelset(&i_tset, SIGBUS); 
+#else 
+#define _SETBUS ;
+#endif 
+#ifdef SIGILL 
+#define _SETILL sigdelset(&i_tset, SIGILL); 
+#else
+#define _SETILL ;
+#endif 
+#ifdef SIGTRAP 
+#define _SETTRAP sigdelset(&i_tset, SIGTRAP); 
+#else
+#define _SETTRAP ;
+#endif 
+#ifdef SIGABRT 
+#define _SETABRT sigdelset(&i_tset, SIGABRT); 
+#else
+#define _SETABRT ;
+#endif 
+#ifdef SIGFPE 
+#define _SETFPE sigdelset(&i_tset, SIGFPE); 
+#else
+#define _SETFPE ;
+#endif 
 #define AFS_SIGSET_CLEAR() \
 do { \
         sigfillset(&i_tset); \
+         _SETSEGV \
+         _SETBUS \
+         _SETILL \
+         _SETTRAP \
+         _SETABRT \
+         _SETFPE \
         assert(AFS_SET_SIGMASK(SIG_BLOCK, &i_tset, &i_oset) == 0); \
 } while (0)