See attached thread dump. I think we just need to use a timeout on the close operations (such as to close consumers, sessions, producers)
Full thread dump Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing):
"Shutdown" prio=1 tid=0x08385960 nid=0x5e99 in Object.wait() [0xaed7d000..0xaed7e130]
at java.lang.Object.wait(Native Method)
- waiting on <0x88af01c8> (a edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at java.lang.Object.wait(Object.java:474)
at edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar.await(CondVar.java:75)
- locked <0x88af01c8> (a edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:318)
at org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:41)
at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:72)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1130)
at org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1660)
at org.apache.activemq.ActiveMQMessageConsumer.close(ActiveMQMessageConsumer.java:516)
at org.apache.activemq.web.WebClient.closeConsumers(WebClient.java:135)
- locked <0x893e6558> (a org.apache.activemq.web.WebClient)
at org.apache.activemq.web.WebClient.close(WebClient.java:145)
- locked <0x893e6558> (a org.apache.activemq.web.WebClient)
at org.apache.activemq.web.WebClient.valueUnbound(WebClient.java:318)
at org.mortbay.jetty.servlet.AbstractSessionManager$Session.unbindValue(AbstractSessionManager.java:899)
at org.mortbay.jetty.servlet.AbstractSessionManager$Session.invalidate(AbstractSessionManager.java:755)
- locked <0x893caa88> (a org.mortbay.jetty.servlet.HashSessionManager$Session)
at org.mortbay.jetty.servlet.AbstractSessionManager.doStop(AbstractSessionManager.java:551)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:63)
at org.mortbay.jetty.servlet.SessionHandler.doStop(SessionHandler.java:124)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:63)
at org.mortbay.jetty.handler.HandlerWrapper.doStop(HandlerWrapper.java:131)
at org.mortbay.jetty.handler.ContextHandler.doStop(ContextHandler.java:467)
at org.mortbay.jetty.webapp.WebAppContext.doStop(WebAppContext.java:477)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:63)
at org.mortbay.jetty.handler.HandlerCollection.doStop(HandlerCollection.java:173)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:63)
at org.mortbay.jetty.handler.HandlerCollection.doStop(HandlerCollection.java:173)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:63)
at org.mortbay.jetty.handler.HandlerWrapper.doStop(HandlerWrapper.java:131)
at org.mortbay.jetty.Server.doStop(Server.java:242)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:63)
at org.mortbay.jetty.Server$ShutdownHookThread.run(Server.java:450)
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java?r1=415306&r2=420714&pathrev=420714
The VMTransport's oneway method was dropping the send request when the peer was disconnected like in the case where the broker is shutdown at the same time that the client is shutdown.