File xinetd-2.3.14-nodeadlock.diff of Package xinetd.7319
--- xinetd/signals.c
+++ xinetd/signals.c
@@ -365,12 +365,18 @@
sigset_t badsigs ;
const char *func = "general_handler" ;
+ sigset_t sigset;
+ /* msg() is not thread safe, so make sure we don't
+ * receive another signal while we're in that function. */
+ sigfillset(&sigset);
+ sigprocmask(SIG_SETMASK, &sigset, &sigset);
+
/*
* Do this here to catch problems like SIGSEGV in msg()
*/
- sigemptyset( &badsigs ) ;
- sigaddset( &badsigs, sig ) ;
- (void) sigprocmask( SIG_UNBLOCK, &badsigs, SIGSET_NULL ) ;
+ // sigemptyset( &badsigs ) ;
+ // sigaddset( &badsigs, sig ) ;
+ // (void) sigprocmask( SIG_UNBLOCK, &badsigs, SIGSET_NULL ) ;
switch ( sig )
{
@@ -393,6 +399,7 @@
if ( debug.on && sig == SIGINT )
exit( 1 ) ;
}
+ sigprocmask(SIG_SETMASK, &sigset, NULL);
}