Author: norman
Date: Wed Apr 13 14:48:57 2011
New Revision: 1091805

URL: http://svn.apache.org/viewvc?rev=1091805&view=rev
Log:
Make sure the channel is not closed before the response is written back to the 
client

Modified:
    
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java

Modified: 
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java?rev=1091805&r1=1091804&r2=1091805&view=diff
==============================================================================
--- 
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
 (original)
+++ 
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
 Wed Apr 13 14:48:57 2011
@@ -28,6 +28,8 @@ import javax.net.ssl.SSLEngine;
 import org.apache.james.protocols.api.Response;
 import org.apache.james.protocols.api.TLSSupportedSession;
 import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelFuture;
+import org.jboss.netty.channel.ChannelFutureListener;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.handler.ssl.SslHandler;
 import org.jboss.netty.handler.stream.ChunkedStream;
@@ -148,13 +150,23 @@ public abstract class AbstractSession im
      * (non-Javadoc)
      * @see 
org.apache.james.api.protocol.ProtocolSession#writeResponse(org.apache.james.api.protocol.Response)
      */
-    public void writeResponse(Response response) {
+    public void writeResponse(final Response response) {
         Channel channel = getChannelHandlerContext().getChannel();
         if (response != null && channel.isConnected()) {
-            channel.write(response);
-            if (response.isEndSession()) {
-                channel.close();
-            }
+            channel.write(response).addListener(new ChannelFutureListener() {
+                
+                /*
+                 * (non-Javadoc)
+                 * @see 
org.jboss.netty.channel.ChannelFutureListener#operationComplete(org.jboss.netty.channel.ChannelFuture)
+                 */
+                public void operationComplete(ChannelFuture c) throws 
Exception {
+                    // once the response was written we can close the channel 
if needed
+                    if (response.isEndSession() && 
c.getChannel().isConnected()) {
+                        c.getChannel().close();         
+                    }
+                }
+            });
+          
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to