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