Author: fhanik Date: Fri Jul 21 12:30:31 2006 New Revision: 424429 URL: http://svn.apache.org/viewvc?rev=424429&view=rev Log: Make sure the key is valid before processing it
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?rev=424429&r1=424428&r2=424429&view=diff ============================================================================== --- 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 Jul 21 12:30:31 2006 @@ -1133,29 +1133,31 @@ iterator.remove(); KeyAttachment attachment = (KeyAttachment)sk.attachment(); try { - if(attachment == null) attachment = new KeyAttachment(); - attachment.access(); - sk.attach(attachment); - - int readyOps = sk.readyOps(); - sk.interestOps(sk.interestOps() & ~readyOps); - SocketChannel channel = (SocketChannel)sk.channel(); - boolean read = sk.isReadable(); - if (read) { - if ( attachment.getWakeUp() ) { - attachment.setWakeUp(false); - synchronized (attachment.getMutex()) {attachment.getMutex().notifyAll();} - } else if ( attachment.getComet() ) { - if (!processSocket(channel,false)) processSocket(channel,true); - } else { - boolean close = (!processSocket(channel)); - if ( close ) { - channel.socket().close(); - channel.close(); + if ( sk.isValid() ) { + if(attachment == null) attachment = new KeyAttachment(); + attachment.access(); + sk.attach(attachment); + int readyOps = sk.readyOps(); + sk.interestOps(sk.interestOps() & ~readyOps); + SocketChannel channel = (SocketChannel)sk.channel(); + boolean read = sk.isReadable(); + if (read) { + if ( attachment.getWakeUp() ) { + attachment.setWakeUp(false); + synchronized (attachment.getMutex()) {attachment.getMutex().notifyAll();} + } else if ( attachment.getComet() ) { + if (!processSocket(channel,false)) processSocket(channel,true); + } else { + boolean close = (!processSocket(channel)); + if ( close ) { + channel.socket().close(); + channel.close(); + } } } - } - if (sk.isValid() && sk.isWritable()) { + } else { + //invalid key + cancelledKey(sk); } } catch ( CancelledKeyException ckx ) { if (attachment!=null && attachment.getComet()) processSocket( (SocketChannel) sk.channel(), true); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]