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