You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2015/01/05 12:45:32 UTC

svn commit: r1649506 - in /tomcat/jk/trunk: native/common/jk_ajp_common.c xdocs/miscellaneous/changelog.xml

Author: rjung
Date: Mon Jan  5 11:45:31 2015
New Revision: 1649506

URL: http://svn.apache.org/r1649506
Log:
BZ 56703: Status: Improve connected counter by
using atomics.

Modified:
    tomcat/jk/trunk/native/common/jk_ajp_common.c
    tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml

Modified: tomcat/jk/trunk/native/common/jk_ajp_common.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_ajp_common.c?rev=1649506&r1=1649505&r2=1649506&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_ajp_common.c (original)
+++ tomcat/jk/trunk/native/common/jk_ajp_common.c Mon Jan  5 11:45:31 2015
@@ -818,7 +818,7 @@ static void ajp_abort_endpoint(ajp_endpo
                 jk_shutdown_socket(ae->sd, l);
             }
         }
-        ae->worker->s->connected--;
+        JK_ATOMIC_DECREMENT(&(ae->worker->s->connected));
         ae->sd = JK_INVALID_SOCKET;
     }
     ae->last_op = JK_AJP13_END_RESPONSE;
@@ -856,9 +856,9 @@ void ajp_close_endpoint(ajp_endpoint_t *
                ae->worker->name, ae->sd, ae->reuse ? "" : " (socket shutdown)");
     if (IS_VALID_SOCKET(ae->sd)) {
         jk_shutdown_socket(ae->sd, l);
-        ae->worker->s->connected--;
+        JK_ATOMIC_DECREMENT(&(ae->worker->s->connected));
+        ae->sd = JK_INVALID_SOCKET;
     }
-    ae->sd = JK_INVALID_SOCKET;
     jk_close_pool(&(ae->pool));
     free(ae);
     JK_TRACE_EXIT(l);
@@ -884,11 +884,9 @@ static int ajp_next_connection(ajp_endpo
      */
     if (IS_VALID_SOCKET(ae->sd)) {
         jk_shutdown_socket(ae->sd, l);
-        ae->worker->s->connected--;
+        JK_ATOMIC_DECREMENT(&(ae->worker->s->connected));
+        ae->sd = JK_INVALID_SOCKET;
     }
-    /* Mark existing endpoint socket as closed
-     */
-    ae->sd = JK_INVALID_SOCKET;
     JK_ENTER_CS(&aw->cs);
     for (i = 0; i < aw->ep_cache_sz; i++) {
         /* Find cache slot with usable socket
@@ -1036,6 +1034,7 @@ int ajp_connect_to_endpoint(ajp_endpoint
 {
     char buf[64];
     int rc = JK_TRUE;
+    int connected;
 
     JK_TRACE_ENTER(l);
 
@@ -1055,11 +1054,11 @@ int ajp_connect_to_endpoint(ajp_endpoint
         JK_TRACE_EXIT(l);
         return JK_FALSE;
     }
-    ae->worker->s->connected++;
+    connected = JK_ATOMIC_INCREMENT(&(ae->worker->s->connected));
     /* Update maximum number of connections
     */
-    if (ae->worker->s->connected > ae->worker->s->max_connected)
-        ae->worker->s->max_connected = ae->worker->s->connected;  
+    if (connected > ae->worker->s->max_connected)
+        ae->worker->s->max_connected = connected;  
     /* set last_access only if needed
      */
     if (ae->worker->cache_timeout > 0)
@@ -1153,7 +1152,7 @@ void jk_ajp_pull(ajp_worker_t * aw, int
                     aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
                     aw->ep_cache[i]->addr_sequence = aw->addr_sequence;
                     jk_shutdown_socket(sd, l);
-                    aw->s->connected--;
+                    JK_ATOMIC_DECREMENT(&(aw->s->connected));
                 }
             }
             jk_clone_sockaddr(&(aw->worker_inet_addr), &inet_addr);
@@ -1215,7 +1214,7 @@ void jk_ajp_push(ajp_worker_t * aw, int
                 aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
                 aw->ep_cache[i]->addr_sequence = aw->addr_sequence;
                 jk_shutdown_socket(sd, l);
-                aw->s->connected--;
+                JK_ATOMIC_DECREMENT(&(aw->s->connected));
             }
         }
         JK_LEAVE_CS(&aw->cs);
@@ -3443,9 +3442,9 @@ int JK_METHOD ajp_maintain(jk_worker_t *
          * called from the watchdog thread.
          */
         for (m = 0; m < m_count; m++) {
-            if (m_sock[m] != JK_INVALID_SOCKET) {
+            if (IS_VALID_SOCKET(m_sock[m])) {
                 jk_shutdown_socket(m_sock[m], l);
-                aw->s->connected--;
+                JK_ATOMIC_DECREMENT(&(aw->s->connected));
             }
         }
         free(m_sock);

Modified: tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml?rev=1649506&r1=1649505&r2=1649506&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Mon Jan  5 11:45:31 2015
@@ -171,6 +171,11 @@
       <fix>
         <bug>44454</bug>: Improve busy counter by using atomics. (rjung)
       </fix>
+      <fix>
+        <bug>56703</bug>: Status: Improve connected counter. Use atomics
+        and for mod_jk (Apache) currectly count down connections closed
+        by child processes that are stopped. (rjung)
+      </fix>
     </changelog>
   </subsection>
 </section>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org