]> granicus.if.org Git - apache/commitdiff
garbage C's in server-status and extra processes with async lingering close.
authorGreg Ames <gregames@apache.org>
Tue, 22 Nov 2011 15:34:47 +0000 (15:34 +0000)
committerGreg Ames <gregames@apache.org>
Tue, 22 Nov 2011 15:34:47 +0000 (15:34 +0000)
backport r1203708 from trunk.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1205039 13f79535-47bb-0310-9956-ffa450edef68

server/connection.c
server/mpm/event/event.c

index 13ba951b0c2410570a84adda38d84cde7bc8d0b1..6e4495f838969efee0ab11b594091d945fe6cba4 100644 (file)
@@ -102,7 +102,9 @@ AP_DECLARE(int) ap_start_lingering_close(conn_rec *c)
         return 1;
     }
 
-    ap_update_child_status(c->sbh, SERVER_CLOSING, NULL);
+    if (c->sbh) {
+        ap_update_child_status(c->sbh, SERVER_CLOSING, NULL);
+    }
 
 #ifdef NO_LINGCLOSE
     ap_flush_conn(c); /* just close it */
index 62560a1d7e2e8cc3c298c06ef02d41dd03e7050e..665d65833cde0faeb8856f33471586f0c63d0375 100644 (file)
@@ -746,6 +746,11 @@ static void set_signals(void)
 static int start_lingering_close(event_conn_state_t *cs)
 {
     apr_status_t rv;
+
+    cs->c->sbh = NULL;  /* prevent scoreboard updates from the listener 
+                         * worker will loop around and set SERVER_READY soon
+                         */
+
     if (ap_start_lingering_close(cs->c)) {
         apr_pool_clear(cs->p);
         ap_push_pool(worker_queue_info, cs->p);