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));
+    }
+    
 }