Blame SOURCES/xinetd-2.3.14-signal-log-hang.patch

4a9f2a
--- a/xinetd/signals.c	2009-05-07 05:56:52.000000000 -0400
4a9f2a
+++ b/xinetd/signals.c.new	2009-05-07 05:56:44.000000000 -0400
4a9f2a
@@ -389,9 +390,11 @@
4a9f2a
          break ;
4a9f2a
       
4a9f2a
       default:
4a9f2a
-         msg( LOG_NOTICE, func, "Unexpected signal %s", sig_name( sig ) ) ;
4a9f2a
-         if ( debug.on && sig == SIGINT )
4a9f2a
-            exit( 1 ) ;
4a9f2a
+         /* Let my_handler() queue this signal for later logging.
4a9f2a
+            Calling msg() and thus syslog() directly here can hang up
4a9f2a
+            the process, trying to acquire an already acquired lock,
4a9f2a
+            because another syslog() could have been the interrupted code. */
4a9f2a
+         my_handler(sig);
4a9f2a
    }
4a9f2a
 }
4a9f2a
 
4a9f2a
@@ -495,6 +497,9 @@
4a9f2a
          default:
4a9f2a
             msg(LOG_ERR, func, "unexpected signal: %s in signal pipe", 
4a9f2a
                sig_name(sig));
4a9f2a
+
4a9f2a
+            if ( debug.on && sig == SIGINT )
4a9f2a
+               exit( 1 ) ;
4a9f2a
       }
4a9f2a
    }
4a9f2a
 }