You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by je...@apache.org on 2013/01/25 23:34:40 UTC
git commit: Clients connections where never disconnected when
client.disconnect was called
Updated Branches:
refs/heads/trunk 7c81b67ea -> 0bbd30640
Clients connections where never disconnected when client.disconnect was called
Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/0bbd3064
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/0bbd3064
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/0bbd3064
Branch: refs/heads/trunk
Commit: 0bbd30640f289e7fe8594657bdfb7f5d2179cfcf
Parents: 7c81b67
Author: Jeff MAURY <je...@apache.org>
Authored: Fri Jan 25 23:34:07 2013 +0100
Committer: Jeff MAURY <je...@apache.org>
Committed: Fri Jan 25 23:34:07 2013 +0100
----------------------------------------------------------------------
.../org/apache/mina/session/AbstractIoSession.java | 2 +
.../transport/tcp/NioTcpClientReleaseTest.java | 82 +++++++++++++++
2 files changed, 84 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina/blob/0bbd3064/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/mina/session/AbstractIoSession.java b/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
index 56eccca..afa6829 100644
--- a/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
+++ b/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
@@ -155,6 +155,7 @@ public abstract class AbstractIoSession implements IoSession, ReadFilterChainCon
LOG.debug("Created new session with id : {}", id);
this.state = SessionState.CREATED;
+ service.getManagedSessions().put(id, this);
}
// ------------------------------------------------------------------------
@@ -756,6 +757,7 @@ public abstract class AbstractIoSession implements IoSession, ReadFilterChainCon
} catch (final RuntimeException e) {
processException(e);
}
+ service.getManagedSessions().remove(id);
}
/**
http://git-wip-us.apache.org/repos/asf/mina/blob/0bbd3064/core/src/test/java/org/apache/mina/transport/tcp/NioTcpClientReleaseTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/mina/transport/tcp/NioTcpClientReleaseTest.java b/core/src/test/java/org/apache/mina/transport/tcp/NioTcpClientReleaseTest.java
new file mode 100644
index 0000000..37c8e78
--- /dev/null
+++ b/core/src/test/java/org/apache/mina/transport/tcp/NioTcpClientReleaseTest.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.transport.tcp;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.mina.api.AbstractIoHandler;
+import org.apache.mina.api.IoSession;
+import org.apache.mina.transport.nio.NioTcpClient;
+import org.apache.mina.transport.nio.NioTcpServer;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class test the resource management of {@link NioTcpClient}.
+ *
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class NioTcpClientReleaseTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(NioTcpClientReleaseTest.class);
+
+ private static final int CLIENT_COUNT = 10;
+
+ private static final int WAIT_TIME = 30000;
+
+ private final CountDownLatch closedLatch = new CountDownLatch(CLIENT_COUNT);
+
+ /**
+ * Create an old IO server and use a bunch of MINA client on it. Test if the events occurs correctly in the
+ * different IoFilters.
+ */
+ @Test
+ public void checkSessionsAreClosedWhenClientIsDisconnected() throws IOException, InterruptedException, ExecutionException {
+
+ NioTcpServer server = new NioTcpServer();
+ server.setIoHandler(new Handler());
+ server.bind(0);
+
+ NioTcpClient client = new NioTcpClient();
+ client.setIoHandler(new AbstractIoHandler() {
+ });
+ for(int i=0; i < CLIENT_COUNT;++i) {
+ client.connect(new InetSocketAddress(server.getServerSocketChannel().socket().getLocalPort())).get();
+ }
+ client.disconnect();
+ assertTrue(closedLatch.await(WAIT_TIME, TimeUnit.MILLISECONDS));
+ }
+
+ private class Handler extends AbstractIoHandler {
+
+ @Override
+ public void sessionClosed(final IoSession session) {
+ LOG.info("** session closed");
+ closedLatch.countDown();
+ }
+ }
+}