Can't close a Netty Client

Jonathan Arnold jdarnold at buddydog.org
Mon Jul 25 15:11:53 EDT 2011


I figured out my problem, perhaps it will help with yours. My problem
was a typical problem it seems - an exception was being thrown that was
getting caught, ignored, and then retried. This meant a worker thread
(in this case, in efflux, the RTP library), never terminated.

I figured this out by running my app in the debugger and then when it 
hung, to pause it and look at all the threads. Well, there were only 2 
in my case - the main one and the rogue worker thread. It was throwing
an exception at a very low level, but that exception was getting
caught at a slightly higher level and being ignored. Ad infinitum.

On Wed, 20 Jul 2011 01:42:51 -0700 (PDT)
"B.L. Zeebub" <roger.varley at googlemail.com> wrote:

> Hi
> 
> Below is the code which starts my NettyClient. The class
> NettyClientService is created and started by an external application.
> When the external application terminates, it calls
> NettyClientService.shutdown() which hangs.
> 
> As the code is written, it's hanging on the
> channel.close().awaitUninterruptibly(). If I change that to simple
> channel.close(), then the class hangs on
> bootstrap.releaseExternalResources();
> 
> Any suggestions on what's wrong, or on how I can further diagnose the
> problem?
> 
> Regards
> Roger
> 
> 
> 
> package com.blackbox.x.comms.client;
> 
> import java.net.InetSocketAddress;
> import java.util.concurrent.Executors;
> 
> import org.apache.log4j.Logger;
> import org.jboss.netty.bootstrap.ClientBootstrap;
> import org.jboss.netty.channel.Channel;
> import org.jboss.netty.channel.ChannelFuture;
> import
> org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
> import org.jboss.netty.util.HashedWheelTimer; import
> org.jboss.netty.util.Timer;
> 
> import com.blackbox.x.comms.common.CommandExecutor;
> 
> 
> 
> public class NettyClientService implements Runnable {
> 
> 	private static final Logger logger = Logger
> 	.getLogger(NettyClientService.class.getName());
> 	
> 	private Channel channel;
> 
> 	private String host;
> 
> 	private CommandExecutor executor;
> 	
> 	private ClientBootstrap bootstrap;
> 	
> 	public NettyClientService(String host, CommandExecutor
> executor) { this.host = host;
> 		this.executor = executor;
> 	}
> 	
> 	public void run() {
> 		
> 		logger.info("Trying to connect to host " + host); 
> 				
> 		bootstrap = new ClientBootstrap(new
> NioClientSocketChannelFactory(Executors
> 				.newCachedThreadPool(),Executors.newCachedThreadPool()));
> 		
> 		// Set up the event pipeline factory.
> 		Timer timer = new HashedWheelTimer();
> 		bootstrap.setPipelineFactory(new
> ClientPipelineFactory(executor,timer));
> bootstrap.setOption("keepAlive", true); 
> 		// Make a new connection.
> 		ChannelFuture future = bootstrap.connect(new
> InetSocketAddress( host, 5956));
> 
> 		channel = future.awaitUninterruptibly().getChannel();
> 		if (!channel.isConnected()) {
> 			
> 			logger.error("Failed to connect to " + host);
> 			executor.close();
> 			bootstrap.releaseExternalResources();
> 			return;
> 			}
> 		
> 		logger.info("Connected to " + host);
> 	}
> 
> 	public void shutdown() {
> 		
> 		
> 		if (channel != null) {
> 			channel.close().awaitUninterruptibly();
> 			}
> 		if (bootstrap != null) {
> 			bootstrap.releaseExternalResources();
> 			}
> 		
> 	}
> 
> 	
> }
> 
> --
> View this message in context:
> http://netty-forums-and-mailing-lists.685743.n2.nabble.com/Can-t-close-a-Netty-Client-tp6601815p6601815.html
> Sent from the Netty User Group mailing list archive at Nabble.com.
> _______________________________________________ netty-users mailing
> list netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users



-- 
Jonathan Arnold        Webstream: http://hieronymus.soup.io

Talent wins games, but team work and intelligence wins championships.
Michael Jordan



More information about the netty-users mailing list