You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by fi...@hyperreal.org on 2000/01/12 04:38:26 UTC

cvs commit: apache-1.3/src/main http_main.c

fielding    00/01/11 19:38:25

  Modified:    src      CHANGES
               src/main http_main.c
  Log:
  this patch is intended to avoid a problem witnessed in apache
  installations with certain third party libraries: if there are many
  children, and then take sufficiently long to shut down, then apache's
  reclaim child processes sends the remaining children SIGKILL.  that's
  alright with me -- shutdown shouldn't take so long -- but the current code
  doesn't wait around for them to die; if they haven't all finished
  terminating right away, it sleeps for approximately 16 seconds before
  noticing that they're dead. thus, the total time required to shut down is
  generally a bit more than twenty seconds ... the last 16 seconds of which
  is quite unnecessary.
  
  anyway, what this patch does is change things so that after SIGKILL has
  been sent, the parent checks a couple of times (approx: 16ms, 84ms, 350ms,
  1.4sec) and then decides that the SIGKILL failed.  i could easily adjust
  this so that the total time spent waiting for the SIGKILL to fail is what
  it was -- 16 seconds, give or take -- but in writing this, i figured that
  if they haven't died after 1.4 seconds, then the SIGKILL wasn't
  sufficient; it's not instant, but it should never take that long.
  
  Submitted by:	Ed Korthof <ed...@apache.org>
  Reviewed by:	Roy Fielding
  
  Revision  Changes    Path
  1.1496    +5 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1495
  retrieving revision 1.1496
  diff -u -r1.1495 -r1.1496
  --- CHANGES	2000/01/12 01:15:20	1.1495
  +++ CHANGES	2000/01/12 03:38:14	1.1496
  @@ -1,5 +1,10 @@
   Changes with Apache 1.3.10
   
  +  *) Reduce the time that a parent waits for its children to die
  +     after SIGKILL has been sent, since there isn't much point in waiting
  +     another 16 seconds beyond the initial SIGTERM waiting period.
  +     [Ed Korthof]
  +
     *) Revert to the 1.3.3 way of getting the server name from the
        scoreboard, with a modification to make it respect the
        UseCanonicalName setting. This makes things work better with
  
  
  
  1.488     +7 -2      apache-1.3/src/main/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/http_main.c,v
  retrieving revision 1.487
  retrieving revision 1.488
  diff -u -r1.487 -r1.488
  --- http_main.c	2000/01/12 01:13:23	1.487
  +++ http_main.c	2000/01/12 03:38:19	1.488
  @@ -2380,7 +2380,7 @@
   
       ap_sync_scoreboard_image();
   
  -    for (tries = terminate ? 4 : 1; tries <= 9; ++tries) {
  +    for (tries = terminate ? 4 : 1; tries <= 12; ++tries) {
   	/* don't want to hold up progress any more than 
   	 * necessary, but we need to allow children a few moments to exit.
   	 * Set delay with an exponential backoff.
  @@ -2435,8 +2435,13 @@
   		   "child process %d still did not exit, sending a SIGKILL",
   			    pid);
   		kill(pid, SIGKILL);
  +		waittime = 1024 * 16; /* give them some time to die */
   		break;
  -	    case 9:     /* 14 sec */
  +	    case 9:     /*   6 sec */
  +	    case 10:    /* 6.1 sec */
  +	    case 11:    /* 6.4 sec */
  +		break;
  +	    case 12:    /* 7.4 sec */
   		/* gave it our best shot, but alas...  If this really 
   		 * is a child we are trying to kill and it really hasn't
   		 * exited, we will likely fail to bind to the port