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