Author: fhanik Date: Mon Sep 24 13:56:31 2007 New Revision: 578963 URL: http://svn.apache.org/viewvc?rev=578963&view=rev Log: optimize pollers, don't lock into a blocking select if there are other things for the thread to do
Modified: tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioBlockingSelector.java tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioEndpoint.java Modified: tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioBlockingSelector.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioBlockingSelector.java?rev=578963&r1=578962&r2=578963&view=diff ============================================================================== --- tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioBlockingSelector.java (original) +++ tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioBlockingSelector.java Mon Sep 24 13:56:31 2007 @@ -207,8 +207,7 @@ } public void wakeup() { - int i = wakeupCounter.addAndGet(1); - if (i==1) selector.wakeup(); + if (wakeupCounter.addAndGet(1)==0) selector.wakeup(); } public void cancel(SelectionKey sk, KeyAttachment key, int ops){ @@ -301,8 +300,10 @@ int i = wakeupCounter.get(); if (i>0) keyCount = selector.selectNow(); - else + else { + wakeupCounter.set(-1); keyCount = selector.select(1000); + } wakeupCounter.set(0); if (!run) break; }catch ( NullPointerException x ) { Modified: tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=578963&r1=578962&r2=578963&view=diff ============================================================================== --- tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/NioEndpoint.java Mon Sep 24 13:56:31 2007 @@ -1342,7 +1342,7 @@ public void addEvent(Runnable event) { events.offer(event); - if ( wakeupCounter.incrementAndGet() < 3 ) selector.wakeup(); + if ( wakeupCounter.incrementAndGet() == 0 ) selector.wakeup(); } public void cometInterest(NioChannel socket) { @@ -1459,7 +1459,14 @@ int keyCount = 0; try { if ( !close ) { - keyCount = selector.select(selectorTimeout); + if (wakeupCounter.get()>0) { + //if we are here, means we have other stuff to do + //do a non blocking select + keyCount = selector.selectNow(); + }else { + wakeupCounter.set( -1); + keyCount = selector.select(selectorTimeout); + } wakeupCounter.set(0); } if (close) { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]