]> granicus.if.org Git - apache/commitdiff
Rework locking on timeout_mutex. We now drop (and reaquire) the lock inside the...
authorPaul Querna <pquerna@apache.org>
Mon, 20 Aug 2007 22:11:00 +0000 (22:11 +0000)
committerPaul Querna <pquerna@apache.org>
Mon, 20 Aug 2007 22:11:00 +0000 (22:11 +0000)
PR: 41712

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@567852 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/experimental/event/event.c

index febdd78b0b1641bb50514eb4d3d07e2102ee7ecf..abee41be8c2ba88ceab0ec31d103e96d9028470e 100644 (file)
@@ -1076,6 +1076,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy)
             cs->state = CONN_STATE_LINGER;
 
             APR_RING_REMOVE(cs, timeout_list);
+            apr_thread_mutex_unlock(timeout_mutex);
 
             rc = push2worker(&cs->pfd, event_pollset);
 
@@ -1088,6 +1089,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy)
                  */
             }
             have_idle_worker = 0;
+            apr_thread_mutex_lock(timeout_mutex);
             cs = APR_RING_FIRST(&keepalive_timeout_head);
         }
 
@@ -1099,11 +1101,14 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy)
 
             cs->state = CONN_STATE_LINGER;
             APR_RING_REMOVE(cs, timeout_list);
+            apr_thread_mutex_unlock(timeout_mutex);
+
             rc = push2worker(&cs->pfd, event_pollset);
             if (rc != APR_SUCCESS) {
                 return NULL;
             }
             have_idle_worker = 0;
+            apr_thread_mutex_lock(timeout_mutex);
             cs = APR_RING_FIRST(&timeout_head);
         }