[ https://issues.apache.org/jira/browse/AMQ-4361?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14969255#comment-14969255 ]
Gary Tully commented on AMQ-4361: --------------------------------- [~shendley] thanks, sorted that IllegalMonitorStateException > Deadlock during close while publishing to flow-controlled queue > --------------------------------------------------------------- > > Key: AMQ-4361 > URL: https://issues.apache.org/jira/browse/AMQ-4361 > Project: ActiveMQ > Issue Type: Bug > Components: JMS client > Affects Versions: 5.6.0, 5.8.0 > Environment: Windows, Linux, JDK 1.6 > Reporter: Sam hendley > Assignee: Timothy Bish > Fix For: 5.9.0 > > > TestCase on github: > https://github.com/samhendley/activemq-close-deadlock-bug > The deadlock occurs when we are using TcpTransport to a flow-controlled queue > and we then try to gracefully shutdown the application. The close operation > hangs forever because it is trying to send a "close packet" to the server. It > never gets the chance to send that request because the socket is blocked by > the publishing thread. This stops my publisher from shutting down and causes > us to orphan threads during shutdown. > I have verified this bug occurs on atleast activemq 5.6.0 and 5.8.0 and on > linux and windows using JDK 1.6. > I don't need a fix for the bug necessarily, just a way to gracefully shutdown > my publisher if I get into this state. > Partial Stack Trace During failure > "ClosingThread" prio=6 tid=0x045ce000 nid=0xa84 waiting on condition > [0x04ddf000] > java.lang.Thread.State: WAITING (parking) > at sun.misc.Unsafe.park(Native Method) > - parking to wait for <0x23fc52d8> (a > java.util.concurrent.locks.ReentrantLock$NonfairSync) > at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:842) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1178) > at > java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186) > at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262) > at > org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:66) > at > org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60) > at > org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1304) > at > org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1298) > at > org.apache.activemq.ActiveMQSession.asyncSendPacket(ActiveMQSession.java:1901) > at > org.apache.activemq.ActiveMQMessageProducer.close(ActiveMQMessageProducer.java:173) > at > org.activemq.bug.DeadlockDuringCloseTest$2.run(DeadlockDuringCloseTest.java:83) > at java.lang.Thread.run(Thread.java:662) > "PublishingThread" prio=6 tid=0x045cd800 nid=0xb84 runnable [0x04d8f000] > java.lang.Thread.State: RUNNABLE > at java.net.SocketOutputStream.socketWrite0(Native Method) > at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) > at java.net.SocketOutputStream.write(SocketOutputStream.java:136) > at > org.apache.activemq.transport.tcp.TcpBufferedOutputStream.flush(TcpBufferedOutputStream.java:115) > at java.io.DataOutputStream.flush(DataOutputStream.java:106) > at > org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:176) > at > org.apache.activemq.transport.AbstractInactivityMonitor.doOnewaySend(AbstractInactivityMonitor.java:322) > at > org.apache.activemq.transport.AbstractInactivityMonitor.oneway(AbstractInactivityMonitor.java:304) > at > org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:85) > at > org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104) > at > org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68) > at > org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60) > at > org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1304) > at > org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1298) > at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1782) > - locked <0x23faa7d8> (a java.lang.Object) > at > org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:289) > at > org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:224) > at > org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:300) > at > org.activemq.bug.DeadlockDuringCloseTest$1.run(DeadlockDuringCloseTest.java:63) > at java.lang.Thread.run(Thread.java:662) -- This message was sent by Atlassian JIRA (v6.3.4#6332)