log.debug("Done iterating through our connections to release a socket channel:"+socket +" released:"+released);
}
+ /**
+ * Use this only if the processor is not available, otherwise use
+ * {@link #release(NioChannel, Http11NioProcessor).
+ */
@Override
public void release(NioChannel socket) {
Http11NioProcessor result = connections.remove(socket);
}
}
+
+ public void release(NioChannel socket, Http11NioProcessor processor) {
+ connections.remove(socket);
+ processor.recycle();
+ recycledProcessors.offer(processor);
+ }
+
+
@Override
public SocketState event(NioChannel socket, SocketStatus status) {
Http11NioProcessor processor = connections.get(socket);
state = processor.asyncPostProcess();
}
if (state == SocketState.OPEN || state == SocketState.CLOSED) {
- release(socket);
+ release(socket, processor);
if (state == SocketState.OPEN) {
socket.getPoller().add(socket);
}
} else if (state == SocketState.OPEN){
// In keep-alive but between requests. OK to recycle
// processor. Continue to poll for the next request.
- release(socket);
+ release(socket, processor);
socket.getPoller().add(socket);
} else {
// Connection closed. OK to recycle the processor.
- release(socket);
+ release(socket, processor);
}
return state;
<code>Connector.stop()</code>. This fix also includes further Lifecycle
refactoring for Connectors and associated components. (markt)
</fix>
+ <fix>
+ Remove a huge memory leak in the NIO connector introduced by the fix
+ for <bug>49884</bug>. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">