You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by yl...@apache.org on 2018/01/18 14:47:41 UTC
svn commit: r1821504 - in /httpd/httpd/trunk: CHANGES
server/mpm/event/event.c server/mpm/worker/worker.c
Author: ylavic
Date: Thu Jan 18 14:47:41 2018
New Revision: 1821504
URL: http://svn.apache.org/viewvc?rev=1821504&view=rev
Log:
mpm_{event,worker}: Mask signals for threads created by modules in child init.
PR 62009, so that they don't receive (implicitely) the ones meant for the MPM.
Inspired by: Armin Abfalterer <a.abfalterer gmail.com>
Proposed by: Yann Ylavic
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/server/mpm/event/event.c
httpd/httpd/trunk/server/mpm/worker/worker.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1821504&r1=1821503&r2=1821504&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Thu Jan 18 14:47:41 2018
@@ -1,6 +1,10 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.1
+ *) mpm_event,worker: Mask signals for threads created by modules in child
+ init, so that they don't receive (implicitely) the ones meant for the MPM.
+ PR 62009. [Armin Abfalterer <a.abfalterer gmail com>, Yann Ylavic]
+
*) mpm_event: Update scoreboard status for KeepAlive state. [Yann Ylavic]
*) core, mpm_event: Avoid a small memory leak of the scoreboard handle, for
Modified: httpd/httpd/trunk/server/mpm/event/event.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/event/event.c?rev=1821504&r1=1821503&r2=1821504&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/event/event.c (original)
+++ httpd/httpd/trunk/server/mpm/event/event.c Thu Jan 18 14:47:41 2018
@@ -2663,6 +2663,7 @@ static void child_main(int child_num_arg
/*stuff to do before we switch id's, so we have permissions. */
ap_reopen_scoreboard(pchild, NULL, 0);
+ /* done with init critical section */
if (ap_run_drop_privileges(pchild, ap_server_conf)) {
clean_child_exit(APEXIT_CHILDFATAL);
}
@@ -2672,9 +2673,6 @@ static void child_main(int child_num_arg
apr_pool_create(&pskip, pchild);
apr_skiplist_init(&timer_skiplist, pskip);
apr_skiplist_set_compare(timer_skiplist, timer_comp, timer_comp);
- ap_run_child_init(pchild, ap_server_conf);
-
- /* done with init critical section */
/* Just use the standard apr_setup_signal_thread to block all signals
* from being received. The child processes no longer use signals for
@@ -2687,6 +2685,8 @@ static void child_main(int child_num_arg
clean_child_exit(APEXIT_CHILDFATAL);
}
+ ap_run_child_init(pchild, ap_server_conf);
+
if (ap_max_requests_per_child) {
conns_this_child = ap_max_requests_per_child;
}
Modified: httpd/httpd/trunk/server/mpm/worker/worker.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/worker/worker.c?rev=1821504&r1=1821503&r2=1821504&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/worker/worker.c (original)
+++ httpd/httpd/trunk/server/mpm/worker/worker.c Thu Jan 18 14:47:41 2018
@@ -1112,17 +1112,16 @@ static void child_main(int child_num_arg
clean_child_exit(APEXIT_CHILDFATAL);
}
+ /* done with init critical section */
if (ap_run_drop_privileges(pchild, ap_server_conf)) {
clean_child_exit(APEXIT_CHILDFATAL);
}
- ap_run_child_init(pchild, ap_server_conf);
-
- /* done with init critical section */
-
/* Just use the standard apr_setup_signal_thread to block all signals
* from being received. The child processes no longer use signals for
- * any communication with the parent process.
+ * any communication with the parent process. Let's also do this before
+ * child_init() hooks are called and possibly create threads that
+ * otherwise could "steal" (implicitely) MPM's signals.
*/
rv = apr_setup_signal_thread();
if (rv != APR_SUCCESS) {
@@ -1131,6 +1130,8 @@ static void child_main(int child_num_arg
clean_child_exit(APEXIT_CHILDFATAL);
}
+ ap_run_child_init(pchild, ap_server_conf);
+
if (ap_max_requests_per_child) {
requests_this_child = ap_max_requests_per_child;
}