arrfab / rpms / httpd

Forked from rpms/httpd 5 years ago
Clone

Blame SOURCES/httpd-2.4.6-sigint.patch

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