Ooops, try this one instead... The listener would not start in the previous patch. Thanks to Paul Reder for catching this.
Bill Index: worker.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v retrieving revision 1.117 diff -u -r1.117 worker.c --- worker.c 18 Apr 2002 17:46:20 -0000 1.117 +++ worker.c 25 Apr 2002 16:06:18 -0000 @@ -999,16 +999,15 @@ clean_child_exit(APEXIT_CHILDFATAL); } threads_created++; - if (threads_created == 1) { - /* now that we have a worker thread, it makes sense to create - * a listener thread (we don't want a listener without a worker!) - */ - create_listener_thread(ts); - } + } + /* All the workers have started. Now start the listener thread */ + create_listener_thread(ts); + if (start_thread_may_exit || threads_created == ap_threads_per_child) { break; } + /* wait for previous generation to clean up an entry */ apr_sleep(1 * APR_USEC_PER_SEC); ++loops; ----- Original Message ----- From: "Bill Stoddard" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, April 25, 2002 11:30 AM Subject: [PATCH] Possible fix for worker MPM performance problem > Would someone care to see if this fixes the worker MPM performance problem reported > earlier on the list (request-per-second dropping when clients exceeded >threadsperchild)? > This patch defers starting the listener untill -all- the workers have started. > > Bill > > Index: worker.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v > retrieving revision 1.117 > diff -u -r1.117 worker.c > --- worker.c 18 Apr 2002 17:46:20 -0000 1.117 > +++ worker.c 25 Apr 2002 15:24:51 -0000 > @@ -999,16 +999,15 @@ > clean_child_exit(APEXIT_CHILDFATAL); > } > threads_created++; > - if (threads_created == 1) { > - /* now that we have a worker thread, it makes sense to create > - * a listener thread (we don't want a listener without a worker!) > - */ > - create_listener_thread(ts); > - } > + > } > if (start_thread_may_exit || threads_created == ap_threads_per_child) { > break; > } > + > + /* All the workers have started. Now start the listener thread */ > + create_listener_thread(ts); > + > /* wait for previous generation to clean up an entry */ > apr_sleep(1 * APR_USEC_PER_SEC); > ++loops; > >