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>
Follow up to r1821504: same comment in event than in worker.
Proposed by: ylavic
Reviewed by: ylavic, icing, covener
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@
1821517 13f79535-47bb-0310-9956-
ffa450edef68
-*- coding: utf-8 -*-
Changes with Apache 2.4.30
+ *) 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]
+
*) mod_md: new experimental, module for managing domains across virtual hosts,
implementing the Let's Encrypt ACMEv1 protocol to signup and renew
certificates. Please read the modules documentation for further instructions
/*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);
}
APR_RING_INIT(&timer_free_ring, timer_event_t, link);
apr_skiplist_init(&timer_skiplist, pchild);
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
- * 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) {
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;
}
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) {
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;
}