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);
 }
 
 
openSUSE Build Service is sponsored by