You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by je...@apache.org on 2001/09/19 07:58:09 UTC
cvs commit: httpd-2.0/server/mpm/worker worker.c
jerenkrantz 01/09/18 22:58:09
Modified: . CHANGES
server/mpm/worker worker.c
Log:
This patch fixes a nasty bug in the worker MPM where the
state of the worker threads was not being reported back to the
scoreboard, and eventually all the threads running in the children
would be reported as being in the "C -- closing connection" state.
This would wreak havoc on the idle_server_maintenance() routine. Since
these threads would never be counted as idle, the server would
spawn children as fast as possible.
Submitted by: Aaron Bannert <aa...@clove.org>
Reviewed by: Justin Erenkrantz
Revision Changes Path
1.365 +2 -0 httpd-2.0/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-2.0/CHANGES,v
retrieving revision 1.364
retrieving revision 1.365
diff -u -r1.364 -r1.365
--- CHANGES 2001/09/19 05:52:42 1.364
+++ CHANGES 2001/09/19 05:58:08 1.365
@@ -1,5 +1,7 @@
Changes with Apache 2.0.26-dev
+ *) Fix worker MPM's scoreboard logic. [Aaron Bannert <aa...@clove.org>]
+
*) Eliminate the wasteful run-time conversion of method names from strings
to numbers in places where the methods are known at compile time.
[Brian Pane <bp...@pacbell.net>]
1.24 +4 -0 httpd-2.0/server/mpm/worker/worker.c
Index: worker.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- worker.c 2001/09/18 22:13:58 1.23
+++ worker.c 2001/09/19 05:58:09 1.24
@@ -697,7 +697,11 @@
free(ti);
+ (void) ap_update_child_status(process_slot, thread_slot,
+ SERVER_STARTING, (request_rec *)NULL);
while (!workers_may_exit) {
+ (void) ap_update_child_status(process_slot, thread_slot,
+ SERVER_READY, (request_rec *)NULL);
rv = ap_queue_pop(worker_queue, &csd, &ptrans);
/* We get FD_QUEUE_EINTR whenever ap_queue_pop() has been interrupted
* from an explicit call to ap_queue_interrupt_all(). This allows