--- protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java 2013-09-13 11:19:09.119167067 -0400 +++ ./IMAPServer.java 2013-09-16 09:50:02.290547177 -0400 @@ -48,6 +48,7 @@ import org.jboss.netty.handler.execution import org.jboss.netty.handler.ssl.SslHandler; import org.jboss.netty.handler.stream.ChunkedWriteHandler; import org.jboss.netty.handler.timeout.IdleStateHandler; +import org.jboss.netty.util.ExternalResourceReleasable; import org.jboss.netty.util.HashedWheelTimer; /** @@ -127,16 +128,19 @@ public class IMAPServer extends Abstract return "IMAP Service"; } - @Override - protected ChannelPipelineFactory createPipelineFactory(final ChannelGroup group) { - - return new ChannelPipelineFactory() { + protected class ImapChannelPipelineFactory implements ChannelPipelineFactory, + ExternalResourceReleasable { private final ChannelGroupHandler groupHandler = new ChannelGroupHandler(group); private final HashedWheelTimer timer = new HashedWheelTimer(); private final TimeUnit TIMEOUT_UNIT = TimeUnit.SECONDS; + ImapChannelPipelineFactory(ChannelGroup group) { + groupHandler = new ChannelGroupHandler(group); + timer = new HashedWheelTimer(); + } + public ChannelPipeline getPipeline() throws Exception { ChannelPipeline pipeline = pipeline(); pipeline.addLast(GROUP_HANDLER, groupHandler); @@ -175,7 +179,18 @@ public class IMAPServer extends Abstract return pipeline; } - }; + @Override + public void releaseExternalResources() { + if (timer != null) { + timer.stop(); + } + } + } + + + @Override + protected ChannelPipelineFactory createPipelineFactory(final ChannelGroup group) { + return new ImapChannelPipelineFactory(group); } @Override