Mailing List Archive

svn commit: r1888917 - in /httpd/httpd/branches/2.4.x: ./ CHANGES server/mpm/event/event.c server/mpm/worker/worker.c
Author: ylavic
Date: Sun Apr 18 17:04:34 2021
New Revision: 1888917

URL: http://svn.apache.org/viewvc?rev=1888917&view=rev
Log:
Merge r1882370 from trunk:

Adjust signal handler before unblocking

* server/mpm/event/event.c: Set the new signal handler before unblocking the
signal as otherwise queued signals get delivered to the old handler
immediately when the signal is unblocked.

* server/mpm/worker/worker.c: Same thing as with event.

Submitted by: rpluem
Reviewed by: ylavic, jorton, icing

Modified:
httpd/httpd/branches/2.4.x/ (props changed)
httpd/httpd/branches/2.4.x/CHANGES
httpd/httpd/branches/2.4.x/server/mpm/event/event.c
httpd/httpd/branches/2.4.x/server/mpm/worker/worker.c

Propchange: httpd/httpd/branches/2.4.x/
------------------------------------------------------------------------------
Merged /httpd/httpd/trunk:r1882370

Modified: httpd/httpd/branches/2.4.x/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/CHANGES?rev=1888917&r1=1888916&r2=1888917&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/CHANGES [utf-8] (original)
+++ httpd/httpd/branches/2.4.x/CHANGES [utf-8] Sun Apr 18 17:04:34 2021
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.4.47

+ *) MPM event/worker: Fix possible crash in child process on early signal
+ delivery. PR 64533. [Ruediger Pluem]
+
*) mod_http2: sync with github standalone version 1.15.17
- Log requests and sent the configured error response in case of early detected
errors like too many or too long headers. [Ruediger Pluem]

Modified: httpd/httpd/branches/2.4.x/server/mpm/event/event.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/mpm/event/event.c?rev=1888917&r1=1888916&r2=1888917&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/mpm/event/event.c (original)
+++ httpd/httpd/branches/2.4.x/server/mpm/event/event.c Sun Apr 18 17:04:34 2021
@@ -1583,8 +1583,8 @@ static void * APR_THREAD_FUNC listener_t
/* Unblock the signal used to wake this thread up, and set a handler for
* it.
*/
- unblock_signal(LISTENER_SIGNAL);
apr_signal(LISTENER_SIGNAL, dummy_signal_handler);
+ unblock_signal(LISTENER_SIGNAL);

for (;;) {
timer_event_t *te;
@@ -2570,8 +2570,8 @@ static void child_main(int child_num_arg
* the other threads in the process needs to take us down
* (e.g., for MaxConnectionsPerChild) it will send us SIGTERM
*/
- unblock_signal(SIGTERM);
apr_signal(SIGTERM, dummy_signal_handler);
+ unblock_signal(SIGTERM);
/* Watch for any messages from the parent over the POD */
while (1) {
rv = ap_mpm_podx_check(my_bucket->pod);

Modified: httpd/httpd/branches/2.4.x/server/mpm/worker/worker.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/mpm/worker/worker.c?rev=1888917&r1=1888916&r2=1888917&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/mpm/worker/worker.c (original)
+++ httpd/httpd/branches/2.4.x/server/mpm/worker/worker.c Sun Apr 18 17:04:34 2021
@@ -553,8 +553,8 @@ static void * APR_THREAD_FUNC listener_t
/* Unblock the signal used to wake this thread up, and set a handler for
* it.
*/
- unblock_signal(LISTENER_SIGNAL);
apr_signal(LISTENER_SIGNAL, dummy_signal_handler);
+ unblock_signal(LISTENER_SIGNAL);

/* TODO: Switch to a system where threads reuse the results from earlier
poll calls - manoj */
@@ -748,8 +748,8 @@ static void * APR_THREAD_FUNC worker_thr
SERVER_STARTING, NULL);

#ifdef HAVE_PTHREAD_KILL
- unblock_signal(WORKER_SIGNAL);
apr_signal(WORKER_SIGNAL, dummy_signal_handler);
+ unblock_signal(WORKER_SIGNAL);
#endif

while (!workers_may_exit) {
@@ -1230,8 +1230,8 @@ static void child_main(int child_num_arg
* the other threads in the process needs to take us down
* (e.g., for MaxConnectionsPerChild) it will send us SIGTERM
*/
- unblock_signal(SIGTERM);
apr_signal(SIGTERM, dummy_signal_handler);
+ unblock_signal(SIGTERM);
/* Watch for any messages from the parent over the POD */
while (1) {
rv = ap_mpm_podx_check(my_bucket->pod);