From fa48a40008a5f1fd5a2a7484e879f0969392d67c Mon Sep 17 00:00:00 2001 From: fhanik Date: Tue, 29 May 2007 20:26:49 +0000 Subject: [PATCH] Make the new way of handling processors work with the ability to read headers in a non blocking way git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@542644 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/coyote/http11/Http11NioProcessor.java | 3 ++- java/org/apache/coyote/http11/Http11NioProtocol.java | 10 ++++++++++ java/org/apache/tomcat/util/net/NioBlockingSelector.java | 2 +- java/org/apache/tomcat/util/net/NioEndpoint.java | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java index dca4cb881..4e6948b99 100644 --- a/java/org/apache/coyote/http11/Http11NioProcessor.java +++ b/java/org/apache/coyote/http11/Http11NioProcessor.java @@ -955,7 +955,8 @@ public class Http11NioProcessor implements ActionHook { } } else { if ( recycle ) recycle(); - return (openSocket) ? SocketState.OPEN : SocketState.CLOSED; + //return (openSocket) ? (SocketState.OPEN) : SocketState.CLOSED; + return (openSocket) ? (recycle?SocketState.OPEN:SocketState.LONG) : SocketState.CLOSED; } } diff --git a/java/org/apache/coyote/http11/Http11NioProtocol.java b/java/org/apache/coyote/http11/Http11NioProtocol.java index defcaa418..53e858efa 100644 --- a/java/org/apache/coyote/http11/Http11NioProtocol.java +++ b/java/org/apache/coyote/http11/Http11NioProtocol.java @@ -622,6 +622,14 @@ public class Http11NioProtocol implements ProtocolHandler, MBeanRegistration public void releaseCaches() { recycledProcessors.clear(); } + + public void release(NioChannel socket) { + Http11NioProcessor result = connections.remove(socket); + if ( result != null ) { + result.recycle(); + recycledProcessors.offer(result); + } + } public SocketState event(NioChannel socket, SocketStatus status) { Http11NioProcessor result = connections.get(socket); @@ -672,6 +680,8 @@ public class Http11NioProtocol implements ProtocolHandler, MBeanRegistration public SocketState process(NioChannel socket) { Http11NioProcessor processor = null; try { + processor = connections.remove(socket); + if (processor == null) { processor = recycledProcessors.poll(); } diff --git a/java/org/apache/tomcat/util/net/NioBlockingSelector.java b/java/org/apache/tomcat/util/net/NioBlockingSelector.java index eb49ba240..79027d8bd 100644 --- a/java/org/apache/tomcat/util/net/NioBlockingSelector.java +++ b/java/org/apache/tomcat/util/net/NioBlockingSelector.java @@ -99,7 +99,7 @@ public class NioBlockingSelector { socket.getPoller().addEvent( new Runnable() { public void run() { - key.cancel(); + socket.getPoller().cancelledKey(key,SocketStatus.ERROR,false); } }); } diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java index 7f282950e..bbc14cb35 100644 --- a/java/org/apache/tomcat/util/net/NioEndpoint.java +++ b/java/org/apache/tomcat/util/net/NioEndpoint.java @@ -1393,6 +1393,7 @@ public class NioEndpoint { processSocket(ka.getChannel(), status, false);//don't dispatch if the lines below are cancelling the key if (status == SocketStatus.TIMEOUT ) return; // don't close on comet timeout } + handler.release(ka.getChannel()); if (key.isValid()) key.cancel(); if (key.channel().isOpen()) try {key.channel().close();}catch (Exception ignore){} try {ka.channel.close(true);}catch (Exception ignore){} @@ -1922,6 +1923,7 @@ public class NioEndpoint { public SocketState process(NioChannel socket); public SocketState event(NioChannel socket, SocketStatus status); public void releaseCaches(); + public void release(NioChannel socket); } -- 2.11.0