Author: fhanik
Date: Fri Mar 23 09:19:47 2007
New Revision: 521790
URL: http://svn.apache.org/viewvc?view=rev&rev=521790
Log:
better error handling
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
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/NioBlockingSelector.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java?view=diff&rev=521790&r1=521789&r2=521790
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
Fri Mar 23 09:19:47 2007
@@ -62,7 +62,7 @@
continue; //we successfully wrote, try again without a
selector
}
}
-
+ if ( key == null ) throw new IOException("Key no longer
registered");
KeyAttachment att = (KeyAttachment) key.attachment();
try {
if ( att.getLatch()==null || att.getLatch().getCount()==0)
att.startLatch(1);
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=521790&r1=521789&r2=521790
==============================================================================
--- 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
Mar 23 09:19:47 2007
@@ -1311,6 +1311,7 @@
}
public void cancelledKey(SelectionKey key, SocketStatus status,
boolean dispatch) {
try {
+ if ( key == null ) return;//nothing to do
KeyAttachment ka = (KeyAttachment) key.attachment();
if (ka != null && ka.getComet()) {
//the comet event takes care of clean up
@@ -1954,54 +1955,60 @@
}
public void run() {
-
-
- SelectionKey key =
socket.getIOChannel().keyFor(socket.getPoller().getSelector());
- int handshake = -1;
+ SelectionKey key = null;
try {
- handshake = socket.handshake(key.isReadable(),
key.isWritable());
- }catch ( IOException x ) {
- handshake = -1;
- if ( log.isDebugEnabled() ) log.debug("Error during SSL
handshake",x);
- }catch ( CancelledKeyException ckx ) {
- handshake = -1;
- }
- if ( handshake == 0 ) {
- // Process the request from this socket
- boolean closed =
(status==null)?(handler.process(socket)==Handler.SocketState.CLOSED) :
- (handler.event(socket,status)==Handler.SocketState.CLOSED);
+ key =
socket.getIOChannel().keyFor(socket.getPoller().getSelector());
+ int handshake = -1;
+ try {
+ handshake = socket.handshake(key.isReadable(),
key.isWritable());
+ }catch ( IOException x ) {
+ handshake = -1;
+ if ( log.isDebugEnabled() ) log.debug("Error during SSL
handshake",x);
+ }catch ( CancelledKeyException ckx ) {
+ handshake = -1;
+ }
+ if ( handshake == 0 ) {
+ // Process the request from this socket
+ 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);
- try {socket.close();}catch (Exception ignore){}
- if ( socket.isOpen() ) socket.close(true);
- key.cancel();
- key.attach(null);
- nioChannels.offer(socket);
- if ( att!=null ) keyCache.offer(att);
- }catch ( Exception x ) {
- log.error("",x);
- }
- }
- } else if (handshake == -1 ) {
- KeyAttachment ka = (KeyAttachment)key.attachment();
-
socket.getPoller().cancelledKey(key,SocketStatus.DISCONNECT,false);
- try {socket.close(true);}catch (IOException ignore){}
- nioChannels.offer(socket);
- if ( ka!=null ) keyCache.offer(ka);
- } else {
- final SelectionKey fk = key;
- final int intops = handshake;
- final KeyAttachment ka = (KeyAttachment)fk.attachment();
- ka.getPoller().add(socket,intops);
+ if (closed) {
+ // Close socket and pool
+ try {
+ KeyAttachment att =
(KeyAttachment)socket.getAttachment(true);
+ try {socket.close();}catch (Exception ignore){}
+ if ( socket.isOpen() ) socket.close(true);
+ key.cancel();
+ key.attach(null);
+ nioChannels.offer(socket);
+ if ( att!=null ) keyCache.offer(att);
+ }catch ( Exception x ) {
+ log.error("",x);
+ }
+ }
+ } else if (handshake == -1 ) {
+ KeyAttachment ka = (KeyAttachment)key.attachment();
+
socket.getPoller().cancelledKey(key,SocketStatus.DISCONNECT,false);
+ try {socket.close(true);}catch (IOException ignore){}
+ nioChannels.offer(socket);
+ if ( ka!=null ) keyCache.offer(ka);
+ } else {
+ final SelectionKey fk = key;
+ final int intops = handshake;
+ final KeyAttachment ka = (KeyAttachment)fk.attachment();
+ ka.getPoller().add(socket,intops);
+ }
+ }catch(CancelledKeyException cx) {
+ socket.getPoller().cancelledKey(key,SocketStatus.ERROR,false);
+ }catch ( Throwable t ) {
+ log.error("",t);
+ socket.getPoller().cancelledKey(key,SocketStatus.ERROR,false);
+ } finally {
+ socket = null;
+ status = null;
+ //return to cache
+ processorCache.offer(this);
}
-
- socket = null;
- status = null;
- //return to cache
- processorCache.offer(this);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]