Fix for DIRMINA-999
diff --git a/core/src/main/java/org/apache/mina/transport/nio/AbstractNioSession.java b/core/src/main/java/org/apache/mina/transport/nio/AbstractNioSession.java
index f2bc4c2..c66fd1f 100644
--- a/core/src/main/java/org/apache/mina/transport/nio/AbstractNioSession.java
+++ b/core/src/main/java/org/apache/mina/transport/nio/AbstractNioSession.java
@@ -326,6 +326,7 @@
// we was flushing writes, now we to the close
channelClose();
+ processSessionClosed();
} else {
// no more write event needed
selectorLoop.modifyRegistration(false, !isReadSuspended(), false, (SelectorListener) this,
diff --git a/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientReleaseTest.java b/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientReleaseTest.java
index fc13539..f3a0064 100644
--- a/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientReleaseTest.java
+++ b/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientReleaseTest.java
@@ -80,4 +80,34 @@
closedLatch.countDown();
}
}
+
+ /**
+ * Test added for DIRMINA-999
+ */
+ @Test
+ public void checkSessionCloseEventIsSentClientSideWhenImmediateIsFalse() throws IOException, InterruptedException,
+ ExecutionException {
+
+ NioTcpServer server = new NioTcpServer();
+ server.bind(0);
+
+ NioTcpClient client = new NioTcpClient();
+ final CountDownLatch closeCounter = new CountDownLatch(1);
+ client.setIoHandler(new AbstractIoHandler() {
+
+ @Override
+ public void sessionOpened(IoSession session) {
+ session.close(false);
+ }
+
+ @Override
+ public void sessionClosed(IoSession session) {
+ closeCounter.countDown();
+ }
+
+ });
+ client.connect(new InetSocketAddress(server.getServerSocketChannel().socket().getLocalPort()));
+ assertTrue(closeCounter.await(WAIT_TIME, TimeUnit.MILLISECONDS));
+ }
+
}