You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2012/08/02 15:08:43 UTC

svn commit: r1368452 - in /httpd/httpd/branches/2.4.x: ./ STATUS server/mpm/event/event.c

Author: jim
Date: Thu Aug  2 13:08:43 2012
New Revision: 1368452

URL: http://svn.apache.org/viewvc?rev=1368452&view=rev
Log:
Merge r1361766 from trunk:

Simplify handling of MaxConnectionsPerChild

If we decrement the counter at accept time and not at close time,
we only need to access the counter in the listener thread and the
code gets much simpler.

Submitted by: sf
Reviewed/backported by: jim

Modified:
    httpd/httpd/branches/2.4.x/   (props changed)
    httpd/httpd/branches/2.4.x/STATUS
    httpd/httpd/branches/2.4.x/server/mpm/event/event.c

Propchange: httpd/httpd/branches/2.4.x/
------------------------------------------------------------------------------
  Merged /httpd/httpd/trunk:r1361766

Modified: httpd/httpd/branches/2.4.x/STATUS
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/STATUS?rev=1368452&r1=1368451&r2=1368452&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/STATUS (original)
+++ httpd/httpd/branches/2.4.x/STATUS Thu Aug  2 13:08:43 2012
@@ -88,11 +88,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-   * event: Simplify handling of MaxConnectionsPerChild.
-     trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1361766
-     2.4.x patch: Trunk patch applies.
-     +1: rjung, sf, jim
-
    * headers: ap_str(case)cmp_match returns the opposite of what is advertized
      in the header.
      trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1366319

Modified: httpd/httpd/branches/2.4.x/server/mpm/event/event.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/mpm/event/event.c?rev=1368452&r1=1368451&r2=1368452&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/mpm/event/event.c (original)
+++ httpd/httpd/branches/2.4.x/server/mpm/event/event.c Thu Aug  2 13:08:43 2012
@@ -172,14 +172,9 @@ static int workers_may_exit = 0;
 static int start_thread_may_exit = 0;
 static int listener_may_exit = 0;
 static int num_listensocks = 0;
-/*
- * As we don't have APR atomic functions for apr_int32_t, we use apr_uint32_t
- * to actually store a signed value. This works as long as the platform uses
- * two's complement representation. This assumption is also made in other
- * parts of the code (e.g. fdqueue.c).
- */
-static apr_uint32_t conns_this_child;
-static apr_uint32_t connection_count = 0;
+static apr_int32_t conns_this_child;        /* MaxConnectionsPerChild, only access
+                                               in listener thread */
+static apr_uint32_t connection_count = 0;   /* Number of open connections */
 static int resource_shortage = 0;
 static fd_queue_t *worker_queue;
 static fd_queue_info_t *worker_queue_info;
@@ -596,7 +591,6 @@ static int volatile restart_pending;
 
 static apr_status_t decrement_connection_count(void *dummy) {
     apr_atomic_dec32(&connection_count);
-    apr_atomic_dec32(&conns_this_child);
     return APR_SUCCESS;
 }
 
@@ -882,7 +876,6 @@ static void process_socket(apr_thread_t 
             apr_bucket_alloc_destroy(cs->bucket_alloc);
             apr_pool_clear(p);
             ap_push_pool(worker_queue_info, p);
-            apr_atomic_dec32(&conns_this_child);
             return;
         }
         apr_atomic_inc32(&connection_count);
@@ -1049,7 +1042,7 @@ static void check_infinite_requests(void
     }
     else {
         /* keep going */
-        apr_atomic_set32(&conns_this_child, APR_INT32_MAX);
+        conns_this_child = APR_INT32_MAX;
     }
 }
 
@@ -1395,9 +1388,8 @@ static void * APR_THREAD_FUNC listener_t
                 break;
         }
 
-        if (((apr_int32_t)apr_atomic_read32(&conns_this_child)) <= 0) {
+        if (conns_this_child <= 0)
             check_infinite_requests();
-        }
 
         now = apr_time_now();
         if (APLOGtrace6(ap_server_conf)) {
@@ -1600,6 +1592,7 @@ static void * APR_THREAD_FUNC listener_t
                     }
 
                     if (csd != NULL) {
+                        conns_this_child--;
                         rc = ap_queue_push(worker_queue, csd, NULL, ptrans);
                         if (rc != APR_SUCCESS) {
                             /* trash the connection; we couldn't queue the connected
@@ -2080,11 +2073,11 @@ static void child_main(int child_num_arg
     }
 
     if (ap_max_requests_per_child) {
-        apr_atomic_set32(&conns_this_child, (apr_uint32_t)ap_max_requests_per_child);
+        conns_this_child = ap_max_requests_per_child;
     }
     else {
         /* coding a value of zero means infinity */
-        apr_atomic_set32(&conns_this_child, APR_INT32_MAX);
+        conns_this_child = APR_INT32_MAX;
     }
 
     /* Setup worker threads */