You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by sf...@apache.org on 2012/02/27 22:45:19 UTC

svn commit: r1294349 - /httpd/httpd/trunk/server/mpm/event/event.c

Author: sf
Date: Mon Feb 27 21:45:18 2012
New Revision: 1294349

URL: http://svn.apache.org/viewvc?rev=1294349&view=rev
Log:
Prevent listener thread from ever updating a worker's scoreboard slot
    
The worker may be doing something else by now. This should take
care of slots staying in "L" state in the scoreboard

Modified:
    httpd/httpd/trunk/server/mpm/event/event.c

Modified: httpd/httpd/trunk/server/mpm/event/event.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/event/event.c?rev=1294349&r1=1294348&r2=1294349&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/event/event.c (original)
+++ httpd/httpd/trunk/server/mpm/event/event.c Mon Feb 27 21:45:18 2012
@@ -767,10 +767,6 @@ static int start_lingering_close(event_c
 {
     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);
@@ -861,6 +857,7 @@ static int process_socket(apr_thread_t *
     int rc;
     ap_sb_handle_t *sbh;
 
+    /* XXX: This will cause unbounded mem usage for long lasting connections */
     ap_create_sb_handle(&sbh, p, my_child_num, my_thread_num);
 
     if (cs == NULL) {           /* This is a new connection */
@@ -1016,6 +1013,13 @@ read_request:
             AP_DEBUG_ASSERT(rc == APR_SUCCESS);
         }
     }
+    /*
+     * Prevent this connection from writing to our connection state after it
+     * is no longer associated with this thread. This would happen if the EOR
+     * bucket is destroyed from the listener thread due to a connection abort
+     * or timeout.
+     */
+    c->sbh = NULL;
     return 1;
 }