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]

Reply via email to