Hi!

Looking at the Http11NioProtocol.Http11ConnectionHandler.release(NioChannel
socket) method in Http11NioProtocol.java,  it looks for me that like
that method does in all other places before any call to
"recycledProcessors.offer(result);" there should be
 - a call to connections.remove(socket)
 - a call to Http11NioProcessor.recycle()

I see two places where those calls are missing.  A patch is inline
below,  as well as attached to the message. Any comments? I might miss
something.

I cannot call release(socket) in the second case, as it is possible
that connections.remove(socket) call will return null there.

[[[
Index: java/org/apache/coyote/http11/Http11NioProtocol.java
===================================================================
--- java/org/apache/coyote/http11/Http11NioProtocol.java        (revision 
1022323)
+++ java/org/apache/coyote/http11/Http11NioProtocol.java        (working copy)
@@ -330,8 +330,7 @@
                         state = processor.asyncPostProcess();
                     }
                     if (state != SocketState.LONG && state !=
SocketState.ASYNC_END) {
-                        connections.remove(socket);
-                        recycledProcessors.offer(processor);
+                        release(socket);
                         if (state == SocketState.OPEN) {
                             socket.getPoller().add(socket);
                         }
@@ -422,6 +421,8 @@
                 // less-than-verbose logs.
                 log.error(sm.getString("http11protocol.proto.error"), e);
             }
+            connections.remove(socket);
+            processor.recycle();
             recycledProcessors.offer(processor);
             return SocketState.CLOSED;
         }

]]]

Best regards,
Konstantin Kolinko
Index: java/org/apache/coyote/http11/Http11NioProtocol.java
===================================================================
--- java/org/apache/coyote/http11/Http11NioProtocol.java        (revision 
1022323)
+++ java/org/apache/coyote/http11/Http11NioProtocol.java        (working copy)
@@ -330,8 +330,7 @@
                         state = processor.asyncPostProcess();
                     }
                     if (state != SocketState.LONG && state != 
SocketState.ASYNC_END) {
-                        connections.remove(socket);
-                        recycledProcessors.offer(processor);
+                        release(socket);
                         if (state == SocketState.OPEN) {
                             socket.getPoller().add(socket);
                         }
@@ -422,6 +421,8 @@
                 // less-than-verbose logs.
                 log.error(sm.getString("http11protocol.proto.error"), e);
             }
+            connections.remove(socket);
+            processor.recycle();
             recycledProcessors.offer(processor);
             return SocketState.CLOSED;
         }
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to