You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/04/11 15:42:05 UTC

svn commit: r932897 - in /james/server/trunk: netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelUpstreamHandler.java smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java

Author: norman
Date: Sun Apr 11 13:42:05 2010
New Revision: 932897

URL: http://svn.apache.org/viewvc?rev=932897&view=rev
Log:
Make sure we really dispose stuff, even on exceptions..

Modified:
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelUpstreamHandler.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java

Modified: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelUpstreamHandler.java?rev=932897&r1=932896&r2=932897&view=diff
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelUpstreamHandler.java (original)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelUpstreamHandler.java Sun Apr 11 13:42:05 2010
@@ -27,10 +27,12 @@ import org.apache.james.protocols.api.Li
 import org.apache.james.protocols.api.ProtocolHandlerChain;
 import org.apache.james.protocols.api.ProtocolSession;
 import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.ChannelPipelineCoverage;
 import org.jboss.netty.channel.ChannelStateEvent;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
+import org.jboss.netty.channel.ExceptionEvent;
 import org.jboss.netty.channel.MessageEvent;
 import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
 
@@ -95,11 +97,28 @@ public abstract class AbstractChannelUps
 
     @Override
     public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
-        attributes.remove(ctx.getChannel());
+        cleanup(ctx.getChannel());
+        
         super.channelClosed(ctx, e);
     }
 
 
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
+        cleanup(ctx.getChannel());
+        
+        super.exceptionCaught(ctx, e);
+    }
+
+    private void cleanup(Channel channel) {
+        ProtocolSession session = (ProtocolSession) attributes.get(channel);
+        if (session != null) {
+            session.resetState();
+            session = null;
+            attributes.remove(channel);
+        }
+    }
+
     /**
      * Create a new "protocol" session 
      * 

Modified: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java?rev=932897&r1=932896&r2=932897&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java Sun Apr 11 13:42:05 2010
@@ -36,24 +36,31 @@ public class SMTPChannelUpstreamHandler 
     @Override
     public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
         logger.info("Dispose objects while closing channel " + ctx.getChannel().getId());
-        // Make sure we dispose everything on exit on session close
-        SMTPSession smtpSession = (SMTPSession) attributes.get(ctx.getChannel());
-        
-        if (smtpSession != null) {
-            LifecycleUtil.dispose(smtpSession.getState().get(SMTPConstants.MAIL));
-            LifecycleUtil.dispose(smtpSession.getState().get(SMTPConstants.DATA_MIMEMESSAGE_STREAMSOURCE));
-            LifecycleUtil.dispose(smtpSession.getState().get(SMTPConstants.DATA_MIMEMESSAGE_OUTPUTSTREAM));
-        }
+        cleanup(ctx.getChannel());
         super.channelDisconnected(ctx, e);
     }
 
+    
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {        
         Channel channel = ctx.getChannel();
         if (channel.isConnected()) {
             ctx.getChannel().write(new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unable to process smtp request"));
         }
+        cleanup(channel);
+        channel.close();
+        super.exceptionCaught(ctx, e);
     }
 
+    private void cleanup(Channel channel) {
+        // Make sure we dispose everything on exit on session close
+        SMTPSession smtpSession = (SMTPSession) attributes.get(channel);
+        
+        if (smtpSession != null) {
+            LifecycleUtil.dispose(smtpSession.getState().get(SMTPConstants.MAIL));
+            LifecycleUtil.dispose(smtpSession.getState().get(SMTPConstants.DATA_MIMEMESSAGE_STREAMSOURCE));
+            LifecycleUtil.dispose(smtpSession.getState().get(SMTPConstants.DATA_MIMEMESSAGE_OUTPUTSTREAM));
+        }
+    }
     
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org