|
|
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 |
|