On 4/12/24 1:02 PM, yla...@apache.org wrote: > Author: ylavic > Date: Fri Apr 12 11:02:31 2024 > New Revision: 1916926 > > URL: http://svn.apache.org/viewvc?rev=1916926&view=rev > Log: > mpm_worker: Fix AH00045 about children processes not terminating timely. > > * server/mpm/worker/worker.c(setup_threads_runtime): > Create pollset with APR_POLLSET_WAKEABLE to be able to wake up the listener > when stopping. > > * server/mpm/worker/worker.c(wakeup_listener): > Wake up the listener using the wakeup pipe (apr_pollset_wakeup). > > * server/mpm/worker/worker.c(join_workers): > Like mpm_event, don't depend on `pthread_kill(listener_thread, 0)` to check > whether the listener has exited (this does not work on some systems), but > use > the "dying" global variable instead which is set by the listener just before > exiting. > > > Added: > httpd/httpd/trunk/changes-entries/worker_exit.txt > Modified: > httpd/httpd/trunk/server/mpm/worker/worker.c > > Modified: httpd/httpd/trunk/server/mpm/worker/worker.c > URL: > http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/worker/worker.c?rev=1916926&r1=1916925&r2=1916926&view=diff > ============================================================================== > --- httpd/httpd/trunk/server/mpm/worker/worker.c (original) > +++ httpd/httpd/trunk/server/mpm/worker/worker.c Fri Apr 12 11:02:31 2024 > @@ -903,8 +910,17 @@ static void setup_threads_runtime(void) > } > > /* Create the main pollset */ > - rv = apr_pollset_create(&worker_pollset, num_listensocks, pruntime, > - APR_POLLSET_NOCOPY); > + pollset_flags = APR_POLLSET_NOCOPY | APR_POLLSET_WAKEABLE; > + rv = apr_pollset_create(&worker_pollset, num_listensocks + 1, pruntime, Small comment in the code would be good why we need the +1 above. > + pollset_flags); > + if (rv == APR_SUCCESS) { > + listener_is_wakeable = 1; > + } > + else { > + pollset_flags &= ~APR_POLLSET_WAKEABLE; > + rv = apr_pollset_create(&worker_pollset, num_listensocks, pruntime, > + pollset_flags); > + } > if (rv != APR_SUCCESS) { > ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf, > APLOGNO(03285) > "Couldn't create pollset in thread;" Regards RĂ¼diger