Author: fhanik
Date: Tue May 13 18:58:27 2008
New Revision: 656084
URL: http://svn.apache.org/viewvc?rev=656084&view=rev
Log:
save a few cpu cycles to avoid exceptions being thrown when a key is invalid
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?rev=656084&r1=656083&r2=656084&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java Tue
May 13 18:58:27 2008
@@ -193,8 +193,7 @@
protected class BlockPoller extends Thread {
protected boolean run = true;
protected Selector selector = null;
- protected ConcurrentLinkedQueue<Runnable> events =
- new ConcurrentLinkedQueue<Runnable>();
+ protected ConcurrentLinkedQueue<Runnable> events = new
ConcurrentLinkedQueue<Runnable>();
public void disable() { run = false; selector.wakeup();}
protected AtomicInteger wakeupCounter = new AtomicInteger(0);
public void cancelKey(final NioChannel socket, final SelectionKey key)
{
@@ -232,6 +231,8 @@
try {
if (sk == null) {
sk = ch.register(selector, ops, key);
+ } else if (!sk.isValid()) {
+ cancel(sk,key,ops);
} else {
sk.interestOps(sk.interestOps() | ops);
}
@@ -260,12 +261,17 @@
if
(SelectionKey.OP_WRITE==(ops&SelectionKey.OP_WRITE))
countDown(key.getWriteLatch());
if
(SelectionKey.OP_READ==(ops&SelectionKey.OP_READ))countDown(key.getReadLatch());
} else {
- sk.interestOps(sk.interestOps() & (~ops));
- if
(SelectionKey.OP_WRITE==(ops&SelectionKey.OP_WRITE))
countDown(key.getWriteLatch());
- if
(SelectionKey.OP_READ==(ops&SelectionKey.OP_READ))countDown(key.getReadLatch());
- if (sk.interestOps()==0) {
- sk.cancel();
- sk.attach(null);
+ if (sk.isValid()) {
+ sk.interestOps(sk.interestOps() & (~ops));
+ if
(SelectionKey.OP_WRITE==(ops&SelectionKey.OP_WRITE))
countDown(key.getWriteLatch());
+ if
(SelectionKey.OP_READ==(ops&SelectionKey.OP_READ))countDown(key.getReadLatch());
+ if (sk.interestOps()==0) {
+ sk.cancel();
+ sk.attach(null);
+ }
+ }else {
+ sk.cancel();
+ sk.attach(null);
}
}
}catch (CancelledKeyException cx) {
@@ -321,8 +327,7 @@
continue;
}
- Iterator<SelectionKey> iterator =
- keyCount > 0 ? selector.selectedKeys().iterator() :
null;
+ Iterator<SelectionKey> iterator = keyCount > 0 ?
selector.selectedKeys().iterator() : null;
// Walk through the collection of ready keys and dispatch
// any active event.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]