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/20 15:24:46 UTC
svn commit: r596687 - in /mina/trunk/core/src:
main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java
main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
test/java/org/apache/mina/transport/AbstractBindTest.java
Author: trustin
Date: Tue Nov 20 06:24:46 2007
New Revision: 596687
URL: http://svn.apache.org/viewvc?rev=596687&view=rev
Log:
Fixed descriptor leak in NioSocketAcceptor
Modified:
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java?rev=596687&r1=596686&r2=596687&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoAcceptor.java Tue Nov 20 06:24:46 2007
@@ -106,7 +106,7 @@
protected abstract Iterator<H> selectedHandles();
protected abstract H bind(SocketAddress localAddress) throws Exception;
protected abstract SocketAddress localAddress(H handle) throws Exception;
- protected abstract T accept(IoProcessor<T> processor, H handle) throws Exception;
+ protected abstract T accept(IoProcessor<T> processor, H handle);
protected abstract void unbind(H handle) throws Exception;
@Override
@@ -246,29 +246,15 @@
H handle = handles.next();
handles.remove();
- boolean success = false;
- try {
- T session = accept(processor, handle);
- if (session == null) {
- break;
- }
-
- finishSessionInitialization(session, null);
-
- // add the session to the SocketIoProcessor
- session.getProcessor().add(session);
- success = true;
- } catch (Throwable t) {
- ExceptionMonitor.getInstance().exceptionCaught(t);
- } finally {
- if (!success) {
- try {
- unbind(handle);
- } catch (Throwable t) {
- ExceptionMonitor.getInstance().exceptionCaught(t);
- }
- }
+ T session = accept(processor, handle);
+ if (session == null) {
+ break;
}
+
+ finishSessionInitialization(session, null);
+
+ // add the session to the SocketIoProcessor
+ session.getProcessor().add(session);
}
}
}
@@ -295,12 +281,10 @@
try {
for (SocketAddress a: localAddresses) {
H handle = null;
- boolean success = false;
try {
handle = bind(a);
- success = true;
} finally {
- if (!success && handle != null) {
+ if (handle != null) {
try {
unbind(handle);
} catch (Exception e) {
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java?rev=596687&r1=596686&r2=596687&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java Tue Nov 20 06:24:46 2007
@@ -170,7 +170,7 @@
@Override
protected NioSession accept(IoProcessor<NioSession> processor,
- ServerSocketChannel handle) throws Exception {
+ ServerSocketChannel handle) {
SelectionKey key = handle.keyFor(selector);
if (!key.isAcceptable()) {
@@ -178,7 +178,14 @@
}
// accept the connection from the client
- SocketChannel ch = handle.accept();
+ SocketChannel ch;
+ try {
+ ch = handle.accept();
+ } catch (IOException e) {
+ ExceptionMonitor.getInstance().exceptionCaught(e);
+ return null;
+ }
+
if (ch == null) {
return null;
}
@@ -190,14 +197,22 @@
protected ServerSocketChannel bind(SocketAddress localAddress)
throws Exception {
ServerSocketChannel c = ServerSocketChannel.open();
- c.configureBlocking(false);
- // Configure the server socket,
- c.socket().setReuseAddress(isReuseAddress());
- c.socket().setReceiveBufferSize(
- getSessionConfig().getReceiveBufferSize());
- // and bind.
- c.socket().bind(localAddress, getBacklog());
- c.register(selector, SelectionKey.OP_ACCEPT);
+ boolean success = false;
+ try {
+ c.configureBlocking(false);
+ // Configure the server socket,
+ c.socket().setReuseAddress(isReuseAddress());
+ c.socket().setReceiveBufferSize(
+ getSessionConfig().getReceiveBufferSize());
+ // and bind.
+ c.socket().bind(localAddress, getBacklog());
+ c.register(selector, SelectionKey.OP_ACCEPT);
+ success = true;
+ } finally {
+ if (!success) {
+ unbind(c);
+ }
+ }
return c;
}
Modified: mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java?rev=596687&r1=596686&r2=596687&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java Tue Nov 20 06:24:46 2007
@@ -81,6 +81,7 @@
socketBound = true;
break;
} catch (IOException e) {
+ //System.out.println(e.getMessage());
}
}