Author: fhanik Date: Thu May 31 12:53:25 2007 New Revision: 543235 URL: http://svn.apache.org/viewvc?view=rev&rev=543235 Log: restore original interest ops
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java?view=diff&rev=543235&r1=543234&r2=543235 ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java Thu May 31 12:53:25 2007 @@ -44,6 +44,9 @@ */ public static int write(ByteBuffer buf, NioChannel socket, long writeTimeout,MutableInteger lastWrite) throws IOException { SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector()); + if ( key == null ) throw new IOException("Key no longer registered"); + KeyAttachment att = (KeyAttachment) key.attachment(); + int prevOps = att.interestOps() | (att.getCometOps()&NioEndpoint.OP_CALLBACK); int written = 0; boolean timedout = false; int keycount = 1; //assume we can write @@ -61,12 +64,10 @@ 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.getWriteLatch()==null || att.getWriteLatch().getCount()==0) att.startWriteLatch(1); //only register for write if a write has not yet been issued - if ( (att.interestOps() & SelectionKey.OP_WRITE) == 0) socket.getPoller().add(socket,SelectionKey.OP_WRITE); + if ( (att.interestOps() & SelectionKey.OP_WRITE) == 0) socket.getPoller().add(socket,prevOps|SelectionKey.OP_WRITE); att.awaitWriteLatch(writeTimeout,TimeUnit.MILLISECONDS); }catch (InterruptedException ignore) { Thread.interrupted(); @@ -90,6 +91,7 @@ cancelKey(socket, key); } } + socket.getPoller().add(socket,prevOps); return written; } @@ -107,7 +109,10 @@ * @throws IOException if an IO Exception occurs in the underlying socket logic */ public static int read(ByteBuffer buf, NioChannel socket, long readTimeout) throws IOException { - final SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector()); + SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector()); + if ( key == null ) throw new IOException("Key no longer registered"); + KeyAttachment att = (KeyAttachment) key.attachment(); + int prevOps = att.interestOps() | (att.getCometOps()&NioEndpoint.OP_CALLBACK); int read = 0; boolean timedout = false; int keycount = 1; //assume we can write @@ -122,10 +127,9 @@ if (cnt > 0) break; } - KeyAttachment att = (KeyAttachment) key.attachment(); try { if ( att.getReadLatch()==null || att.getReadLatch().getCount()==0) att.startReadLatch(1); - if ( att.interestOps() == 0) socket.getPoller().add(socket,SelectionKey.OP_READ); + if ( (att.interestOps() & SelectionKey.OP_READ) == 0) socket.getPoller().add(socket,prevOps|SelectionKey.OP_READ); att.awaitReadLatch(readTimeout,TimeUnit.MILLISECONDS); }catch (InterruptedException ignore) { Thread.interrupted(); @@ -148,6 +152,7 @@ cancelKey(socket,key); } } + socket.getPoller().add(socket,prevOps); return read; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]