Blame SOURCES/httpd-2.4.6-sigint.patch
|
|
33b929 |
diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c
|
|
|
6670f0 |
index 559f90a..a386a75 100644
|
|
|
33b929 |
--- a/server/mpm/prefork/prefork.c
|
|
|
33b929 |
+++ b/server/mpm/prefork/prefork.c
|
|
|
6670f0 |
@@ -220,6 +220,9 @@ static void clean_child_exit(int code)
|
|
|
33b929 |
{
|
|
|
6670f0 |
retained->mpm->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 |
}
|
|
|
6670f0 |
@@ -699,6 +702,13 @@ static int make_child(server_rec *s, int slot, int bucket)
|
|
|
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 |
*/
|