Stuck in an infinite loop inside Netty when shutting down NIO client

tsuna tsunanet at gmail.com
Mon Nov 22 00:22:47 EST 2010


In my application, I'm calling
NioClientSocketChannelFactory.releaseExternalResources() from a brand
new thread, and I'm still getting in cases where my application is
unable to shutdown as it gets stuck in an infinite loop in Netty.

Here's the stack trace of the thread that's shutting down Netty:
"HBaseClient at 647057258 shutdown" prio=10 tid=0x00000000402ea000
nid=0x60a1 waiting on condition [0x0000000040927000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00002aab5fea21a8> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
	at java.util.concurrent.ThreadPoolExecutor.awaitTermination(ThreadPoolExecutor.java:1253)
	at org.jboss.netty.util.internal.ExecutorUtil.terminate(ExecutorUtil.java:87)
	at org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.releaseExternalResources(NioClientSocketChannelFactory.java:143)
	at org.hbase.async.HBaseClient$1ShutdownThread.run(HBaseClient.java:502)


Here are the two lingering threads from Netty that don't wanna go away:

"New I/O client worker #1-3" prio=10 tid=0x00000000402e7000 nid=0x60a0
runnable [0x00000000405ab000]
   java.lang.Thread.State: RUNNABLE
	at sun.nio.ch.IOUtil.drain(Native Method)
	at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:76)
	- locked <0x00002aab5feaa3f8> (a java.lang.Object)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
	- locked <0x00002aab5feaa130> (a sun.nio.ch.Util$1)
	- locked <0x00002aab5feaa118> (a java.util.Collections$UnmodifiableSet)
	- locked <0x00002aab5fea3190> (a sun.nio.ch.EPollSelectorImpl)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
	at org.jboss.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:38)
	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:164)
	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
	at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

"New I/O client worker #1-2" prio=10 tid=0x0000000040113000 nid=0x609f
runnable [0x0000000040c8b000]
   java.lang.Thread.State: RUNNABLE
	at sun.nio.ch.IOUtil.drain(Native Method)
	at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:76)
	- locked <0x00002aab5fea85d0> (a java.lang.Object)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
	- locked <0x00002aab5fea8308> (a sun.nio.ch.Util$1)
	- locked <0x00002aab5fea82f0> (a java.util.Collections$UnmodifiableSet)
	- locked <0x00002aab5fea6658> (a sun.nio.ch.EPollSelectorImpl)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
	at org.jboss.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:38)
	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:164)
	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
	at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

Full stack trace is in the comment at the end of
https://gist.github.com/709554#file_async_h_base_put.java
The code that's shutting down Netty is at
https://github.com/stumbleupon/asynchbase/blob/def453b61935f9b93a8bc58e720e31ab2969482f/src/HBaseClient.java#L502

Any idea what could be causing this?  Am I doing something wrong?

-- 
Benoit "tsuna" Sigoure
Software Engineer @ www.StumbleUpon.com


More information about the netty-users mailing list