You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/11/21 08:26:16 UTC

svn commit: r596967 - in /mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr: AprIoProcessor.java AprSocketAcceptor.java

Author: trustin
Date: Tue Nov 20 23:26:14 2007
New Revision: 596967

URL: http://svn.apache.org/viewvc?rev=596967&view=rev
Log:
Fixed unnecessary CPU consumption in ApiIoProcessor and AprSocketAcceptor

Modified:
    mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java
    mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java

Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java?rev=596967&r1=596966&r2=596967&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java Tue Nov 20 23:26:14 2007
@@ -117,7 +117,31 @@
     @Override
     protected boolean select(int timeout) throws Exception {
         int rv = Poll.poll(pollset, 1000 * timeout, polledSockets, false);
-        if (rv > 0) {
+        if (rv <= 0) {
+            if (rv != -120001) {
+                throwException(rv);
+            }
+            
+            rv = Poll.maintain(pollset, polledSockets, true);
+            if (rv > 0) {
+                for (int i = 0; i < rv; i ++) {
+                    long socket = polledSockets[i];
+                    AprSession session = allSessions.get(socket);
+                    if (session == null) {
+                        continue;
+                    }
+                    
+                    int flag = (session.isInterestedInRead()? Poll.APR_POLLIN : 0) |
+                               (session.isInterestedInWrite()? Poll.APR_POLLOUT : 0);
+
+                    Poll.add(pollset, socket, flag);
+                }
+            } else if (rv < 0) {
+                throwException(rv);
+            }
+
+            return false;
+        } else {
             rv <<= 1;
             if (!polledSessions.isEmpty()) {
                 polledSessions.clear();
@@ -144,11 +168,7 @@
             }
             
             return !polledSessions.isEmpty();
-        } else if (rv < 0 && rv != -120001) {
-            throwException(rv);
         }
-
-        return false;
     }
 
     @Override

Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java?rev=596967&r1=596966&r2=596967&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java Tue Nov 20 23:26:14 2007
@@ -20,7 +20,6 @@
 import org.apache.tomcat.jni.Address;
 import org.apache.tomcat.jni.Poll;
 import org.apache.tomcat.jni.Pool;
-import org.apache.tomcat.jni.Sockaddr;
 import org.apache.tomcat.jni.Socket;
 import org.apache.tomcat.jni.Status;
 
@@ -116,7 +115,6 @@
             if (result != Status.APR_SUCCESS) {
                 throwException(result);
             }
-            System.out.println("BOUND");
             success = true;
         } finally {
             if (!success) {
@@ -182,8 +180,8 @@
 
     @Override
     protected SocketAddress localAddress(Long handle) throws Exception {
-        Sockaddr la = Address.getInfo(Address.get(Socket.APR_LOCAL, handle));
-        return new InetSocketAddress(la.hostname, la.port);
+        long la = Address.get(Socket.APR_LOCAL, handle);
+        return new InetSocketAddress(Address.getip(la), Address.getInfo(la).port);
     }
 
     @Override
@@ -194,10 +192,21 @@
 
         int rv = Poll.poll(pollset, Integer.MAX_VALUE, polledSockets, false);
         if (rv <= 0) {
-            System.out.println(org.apache.tomcat.jni.Error.strerror(-rv));
-            Thread.sleep(1000);
-        }
-        if (rv > 0) {
+            if (rv != -120001) {
+                throwException(rv);
+            }
+            
+            rv = Poll.maintain(pollset, polledSockets, true);
+            if (rv > 0) {
+                for (int i = 0; i < rv; i ++) {
+                    Poll.add(pollset, polledSockets[i], Poll.APR_POLLIN);
+                }
+            } else if (rv < 0) {
+                throwException(rv);
+            }
+            
+            return false;
+        } else {
             rv <<= 1;
             if (!polledHandles.isEmpty()) {
                 polledHandles.clear();
@@ -214,18 +223,13 @@
                     continue;
                 }
                 
-                System.out.println("Polled: " + socket + ", " + flag);
-
                 if ((flag & Poll.APR_POLLIN) != 0) {
+                    Poll.add(pollset, socket, Poll.APR_POLLIN);
                     polledHandles.add(socket);
                 }
             }
             return !polledHandles.isEmpty();
-        } else if (rv < 0 && rv != -120001) {
-            throwException(rv);
         }
-
-        return false;
     }
 
     @Override
@@ -245,7 +249,6 @@
         if (result != Status.APR_SUCCESS) {
             throwException(result);
         }
-        System.out.println("UNBOUND");
     }
 
     @Override