Author: markt
Date: Wed Apr 13 18:48:35 2016
New Revision: 1738982

URL: http://svn.apache.org/viewvc?rev=1738982&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58970
Fix a connection counting bug in the NIO connector that meant some dropped 
connections were not removed from the current connection count. 

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1738982&r1=1738981&r2=1738982&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Wed Apr 13 
18:48:35 2016
@@ -625,8 +625,14 @@ public class NioEndpoint extends Abstrac
             } else {
                 final SelectionKey key = 
socket.getIOChannel().keyFor(socket.getPoller().getSelector());
                 try {
-                    boolean cancel = false;
-                    if (key != null) {
+                    if (key == null) {
+                        // The key was cancelled (e.g. due to socket closure)
+                        // and removed from the selector while it was being
+                        // processed. Count down the connections at this point
+                        // since it won't have been counted down when the 
socket
+                        // closed.
+                        
socket.socketWrapper.getEndpoint().countDownConnection();
+                    } else {
                         final NioSocketWrapper socketWrapper = 
(NioSocketWrapper) key.attachment();
                         if (socketWrapper != null) {
                             //we are registering the key to start with, reset 
the fairness counter.
@@ -634,12 +640,9 @@ public class NioEndpoint extends Abstrac
                             socketWrapper.interestOps(ops);
                             key.interestOps(ops);
                         } else {
-                            cancel = true;
+                            socket.getPoller().cancelledKey(key);
                         }
-                    } else {
-                        cancel = true;
                     }
-                    if (cancel) socket.getPoller().cancelledKey(key);
                 } catch (CancelledKeyException ckx) {
                     try {
                         socket.getPoller().cancelledKey(key);

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1738982&r1=1738981&r2=1738982&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Apr 13 18:48:35 2016
@@ -53,6 +53,11 @@
         provided by Ondrej Medek. (markt)
       </fix>
       <fix>
+        <bug>58970</bug>: Fix a connection counting bug in the NIO connector
+        that meant some dropped connections were not removed from the current
+        connection count. (markt)
+      </fix>
+      <fix>
         <bug>59206</bug>: Ensure NPE will not be thrown by
         <code>o.a.tomcat.util.file.ConfigFileLoader</code> when
         <code>catalina.base</code> is not specified. (violetagg)



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

Reply via email to