]> Raphaƫl G. Git Repositories - ihttpd/blob - SOURCES/httpd-2.4.10-sigint.patch
Add dependencies to avoid race conditions and be sure we start in time
[ihttpd] / SOURCES / httpd-2.4.10-sigint.patch
1 From 20656c3b77cc548b59fea3bde5e2b7705d71c427 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Jan=20Kalu=C5=BEa?= <jkaluza@apache.org>
3 Date: Mon, 18 Aug 2014 07:43:43 +0000
4 Subject: [PATCH] prefork: Ignore SIGINT in child. This fixes race-condition in
5 signals handling when httpd is runnning on foreground and user hits ctrl+c.
6 In this case, SIGINT is sent to all children followed by SIGTERM from the
7 main process, which interrupts the SIGINT handler and leads to inconsistency
8 (process freezes or crashes).
9
10 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1618555 13f79535-47bb-0310-9956-ffa450edef68
11 ---
12 server/mpm/prefork/prefork.c | 10 ++++++++++
13 1 file changed, 10 insertions(+)
14
15 diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c
16 index 8790ec0..d6c038b 100644
17 --- a/server/mpm/prefork/prefork.c
18 +++ b/server/mpm/prefork/prefork.c
19 @@ -222,6 +222,9 @@ static void clean_child_exit(int code)
20 {
21 mpm_state = AP_MPMQ_STOPPING;
22
23 + apr_signal(SIGHUP, SIG_IGN);
24 + apr_signal(SIGTERM, SIG_IGN);
25 +
26 if (pchild) {
27 apr_pool_destroy(pchild);
28 }
29 @@ -817,6 +820,13 @@ static int make_child(server_rec *s, int slot)
30 */
31 apr_signal(SIGHUP, just_die);
32 apr_signal(SIGTERM, just_die);
33 + /* Ignore SIGINT in child. This fixes race-condition in signals
34 + * handling when httpd is runnning on foreground and user hits ctrl+c.
35 + * In this case, SIGINT is sent to all children followed by SIGTERM
36 + * from the main process, which interrupts the SIGINT handler and
37 + * leads to inconsistency.
38 + */
39 + apr_signal(SIGINT, SIG_IGN);
40 /* The child process just closes listeners on AP_SIG_GRACEFUL.
41 * The pod is used for signalling the graceful restart.
42 */
43 --
44 2.0.4
45