You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2007/04/13 21:05:02 UTC
svn commit: r528594 -
/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
Author: fhanik
Date: Fri Apr 13 12:05:01 2007
New Revision: 528594
URL: http://svn.apache.org/viewvc?view=rev&rev=528594
Log:
consolidate usage between executor runnables and worker threads
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=528594&r1=528593&r2=528594
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Fri Apr 13 12:05:01 2007
@@ -1836,6 +1836,8 @@
// Process requests until we receive a shutdown signal
while (running) {
+ NioChannel socket = null;
+ SelectionKey key = null;
try {
// Wait for the next socket to be assigned
Object channel = await();
@@ -1857,10 +1859,10 @@
}
} else {
- NioChannel socket = (NioChannel)channel;
-
- SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());
+ socket = (NioChannel)channel;
+ key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());
int handshake = -1;
+
try {
if (key!=null) handshake = socket.handshake(key.isReadable(), key.isWritable());
}catch ( IOException x ) {
@@ -1871,30 +1873,32 @@
}
if ( handshake == 0 ) {
// Process the request from this socket
- if ((status != null) && (handler.event(socket, status) == Handler.SocketState.CLOSED)) {
- // Close socket and pool
- try {
- KeyAttachment att = (KeyAttachment)socket.getAttachment(true);
- getPoller0().cancelledKey(key,SocketStatus.ERROR,false);
- nioChannels.offer(socket);
- if ( att!=null ) keyCache.offer(att);
- }catch ( Exception x ) {
- log.error("",x);
- }
- } else if ((status == null) && (handler.process(socket) == Handler.SocketState.CLOSED)) {
+ boolean closed = (status==null)?(handler.process(socket)==Handler.SocketState.CLOSED) :
+ (handler.event(socket,status)==Handler.SocketState.CLOSED);
+
+ if (closed) {
// Close socket and pool
try {
- KeyAttachment att = (KeyAttachment)socket.getAttachment(true);
- getPoller0().cancelledKey(key,SocketStatus.ERROR,false);
+ KeyAttachment ka = null;
+ if (key!=null) {
+ ka = (KeyAttachment) key.attachment();
+ if (ka!=null) ka.setComet(false);
+ socket.getPoller().cancelledKey(key, SocketStatus.ERROR, false);
+ }
nioChannels.offer(socket);
- if ( att!=null ) keyCache.offer(att);
+ if ( ka!=null ) keyCache.offer(ka);
}catch ( Exception x ) {
log.error("",x);
}
- }
+ }
} else if (handshake == -1 ) {
- socket.getPoller().cancelledKey(key,SocketStatus.DISCONNECT);
+ KeyAttachment ka = null;
+ if (key!=null) {
+ ka = (KeyAttachment) key.attachment();
+ socket.getPoller().cancelledKey(key, SocketStatus.DISCONNECT, false);
+ }
nioChannels.offer(socket);
+ if ( ka!=null ) keyCache.offer(ka);
} else {
final SelectionKey fk = key;
final int intops = handshake;
@@ -1902,6 +1906,8 @@
ka.getPoller().add(socket,intops);
}
}
+ }catch(CancelledKeyException cx) {
+ if (socket!=null && key!=null) socket.getPoller().cancelledKey(key,null,false);
} catch (OutOfMemoryError oom) {
try {
oomParachuteData = null;
@@ -2078,8 +2084,8 @@
KeyAttachment ka = null;
if (key!=null) {
ka = (KeyAttachment) key.attachment();
- ka.setComet(false);
- socket.getPoller().cancelledKey(key, SocketStatus.DISCONNECT, false);
+ if (ka!=null) ka.setComet(false);
+ socket.getPoller().cancelledKey(key, SocketStatus.ERROR, false);
}
nioChannels.offer(socket);
if ( ka!=null ) keyCache.offer(ka);
@@ -2102,7 +2108,7 @@
ka.getPoller().add(socket,intops);
}
}catch(CancelledKeyException cx) {
- socket.getPoller().cancelledKey(key,SocketStatus.ERROR,false);
+ socket.getPoller().cancelledKey(key,null,false);
} catch (OutOfMemoryError oom) {
try {
oomParachuteData = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org