Blame SOURCES/httpd-2.4.6-sigint.patch

33b929
From 20656c3b77cc548b59fea3bde5e2b7705d71c427 Mon Sep 17 00:00:00 2001
33b929
From: =?UTF-8?q?Jan=20Kalu=C5=BEa?= <jkaluza@apache.org>
33b929
Date: Mon, 18 Aug 2014 07:43:43 +0000
33b929
Subject: [PATCH] prefork: Ignore SIGINT in child. This fixes race-condition in
33b929
 signals handling when httpd is runnning on foreground and user hits ctrl+c.
33b929
 In this case, SIGINT is sent to all children followed by SIGTERM from the
33b929
 main process, which interrupts the SIGINT handler and leads to inconsistency
33b929
 (process freezes or crashes).
33b929
33b929
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1618555 13f79535-47bb-0310-9956-ffa450edef68
33b929
---
33b929
 server/mpm/prefork/prefork.c | 10 ++++++++++
33b929
 1 file changed, 10 insertions(+)
33b929
33b929
diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c
33b929
index 8790ec0..d6c038b 100644
33b929
--- a/server/mpm/prefork/prefork.c
33b929
+++ b/server/mpm/prefork/prefork.c
33b929
@@ -222,6 +222,9 @@ static void clean_child_exit(int code)
33b929
 {
33b929
     mpm_state = AP_MPMQ_STOPPING;
33b929
 
33b929
+    apr_signal(SIGHUP, SIG_IGN);
33b929
+    apr_signal(SIGTERM, SIG_IGN);
33b929
+
33b929
     if (pchild) {
33b929
         apr_pool_destroy(pchild);
33b929
     }
33b929
@@ -817,6 +820,13 @@ static int make_child(server_rec *s, int slot)
33b929
          */
33b929
         apr_signal(SIGHUP, just_die);
33b929
         apr_signal(SIGTERM, just_die);
33b929
+        /* Ignore SIGINT in child. This fixes race-condition in signals
33b929
+         * handling when httpd is runnning on foreground and user hits ctrl+c.
33b929
+         * In this case, SIGINT is sent to all children followed by SIGTERM
33b929
+         * from the main process, which interrupts the SIGINT handler and
33b929
+         * leads to inconsistency.
33b929
+         */
33b929
+        apr_signal(SIGINT, SIG_IGN);
33b929
         /* The child process just closes listeners on AP_SIG_GRACEFUL.
33b929
          * The pod is used for signalling the graceful restart.
33b929
          */
33b929
-- 
33b929
2.0.4
33b929