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/12/04 07:38:50 UTC
svn commit: r600803 - in /mina:
branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/
branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/
trunk/core/src/main/java/org/apache/mina/common/
trunk/core/src/main/java/org/ap...
Author: trustin
Date: Mon Dec 3 22:38:46 2007
New Revision: 600803
URL: http://svn.apache.org/viewvc?rev=600803&view=rev
Log:
Fixed issue: DIRMINA-435 (NullPointerException in IoServiceListenerSupport)
* MINA was not handling the case that SocketChannel.finishConnect() returns false. Made sure the selection key is not cancelled if finishConnect() returns false.
Modified:
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoConnector.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramConnector.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java
mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java?rev=600803&r1=600802&r2=600803&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java Mon Dec 3 22:38:46 2007
@@ -38,9 +38,10 @@
import org.apache.mina.common.support.AbstractIoFilterChain;
import org.apache.mina.common.support.BaseIoConnector;
import org.apache.mina.common.support.DefaultConnectFuture;
-import org.apache.mina.util.Queue;
-import org.apache.mina.util.NewThreadExecutor;
import org.apache.mina.util.NamePreservingRunnable;
+import org.apache.mina.util.NewThreadExecutor;
+import org.apache.mina.util.Queue;
+
import edu.emory.mathcs.backport.java.util.concurrent.Executor;
/**
@@ -292,14 +293,16 @@
boolean success = false;
try {
- ch.finishConnect();
- newSession(ch, entry.handler, entry.config, entry);
+ if (ch.finishConnect()) {
+ key.cancel();
+ newSession(ch, entry.handler, entry.config, entry);
+ }
success = true;
} catch (Throwable e) {
entry.setException(e);
} finally {
- key.cancel();
if (!success) {
+ key.cancel();
try {
ch.close();
} catch (IOException e) {
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java?rev=600803&r1=600802&r2=600803&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java Mon Dec 3 22:38:46 2007
@@ -272,14 +272,16 @@
boolean success = false;
try {
- ch.finishConnect();
- newSession(ch, entry.handler, entry.config, entry);
+ if (ch.finishConnect()) {
+ key.cancel();
+ newSession(ch, entry.handler, entry.config, entry);
+ }
success = true;
} catch (Throwable e) {
entry.setException(e);
} finally {
- key.cancel();
if (!success) {
+ key.cancel();
try {
ch.close();
} catch (IOException e) {
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoConnector.java?rev=600803&r1=600802&r2=600803&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoConnector.java Mon Dec 3 22:38:46 2007
@@ -115,7 +115,7 @@
protected abstract void destroy() throws Exception;
protected abstract H newHandle(SocketAddress localAddress) throws Exception;
protected abstract boolean connect(H handle, SocketAddress remoteAddress) throws Exception;
- protected abstract void finishConnect(H handle) throws Exception;
+ protected abstract boolean finishConnect(H handle) throws Exception;
protected abstract T newSession(IoProcessor<T> processor, H handle) throws Exception;
protected abstract void close(H handle) throws Exception;
protected abstract void wakeup();
@@ -241,12 +241,13 @@
ConnectionRequest entry = connectionRequest(handle);
boolean success = false;
try {
- finishConnect(handle);
- T session = newSession(processor, handle);
- finishSessionInitialization(session, entry);
- // Forward the remaining process to the IoProcessor.
- session.getProcessor().add(session);
- nHandles ++;
+ if (finishConnect(handle)) {
+ T session = newSession(processor, handle);
+ finishSessionInitialization(session, entry);
+ // Forward the remaining process to the IoProcessor.
+ session.getProcessor().add(session);
+ nHandles ++;
+ }
success = true;
} catch (Throwable e) {
entry.setException(e);
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramConnector.java?rev=600803&r1=600802&r2=600803&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramConnector.java Mon Dec 3 22:38:46 2007
@@ -137,7 +137,7 @@
}
@Override
- protected void finishConnect(DatagramChannel handle) throws Exception {
+ protected boolean finishConnect(DatagramChannel handle) throws Exception {
throw new UnsupportedOperationException();
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java?rev=600803&r1=600802&r2=600803&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java Mon Dec 3 22:38:46 2007
@@ -125,13 +125,16 @@
}
@Override
- protected void finishConnect(SocketChannel handle) throws Exception {
+ protected boolean finishConnect(SocketChannel handle) throws Exception {
SelectionKey key = handle.keyFor(selector);
- if (key != null) {
- key.cancel();
+ if (handle.finishConnect()) {
+ if (key != null) {
+ key.cancel();
+ }
+ return true;
}
- handle.finishConnect();
+ return false;
}
@Override
Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java?rev=600803&r1=600802&r2=600803&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java Mon Dec 3 22:38:46 2007
@@ -176,13 +176,14 @@
}
@Override
- protected void finishConnect(Long handle) throws Exception {
+ protected boolean finishConnect(Long handle) throws Exception {
Poll.remove(pollset, handle);
requests.remove(handle);
if (failedHandles.remove(handle)) {
int rv = Socket.recvb(handle, dummyBuffer, 0, 1);
throwException(rv);
}
+ return true;
}
@Override