I think that if we enable async dispatch this issue should go away.
This would only affect vm transport since the transport oneways.  We
should look into making async to be dispatch be the default when using
the vm transport.

On 8/11/06, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
I sometime have deadlocks while running junit tests that involve ActiveMQ.
Following is a stack trace i dumped.
As you can see, the two last threads are deadlocked because of the
MutexTransport.
This cause the first thread (main thread) to hang forever.

    Thread [main] (Suspended)
        MutexTransport.oneway(Command) line: 44
             ==> MutexTransport (id=292)
        ResponseCorrelator.oneway(Command) line: 58
        ManagedTransportConnection(TransportConnection).dispatch(Command)
line: 211

ManagedTransportConnection(AbstractConnection).processDispatch(Command)
line: 628
        ManagedTransportConnection(AbstractConnection).dispatchSync(Command)
line: 605
        TopicSubscription.dispatch(MessageReference) line: 315
        TopicSubscription.add(MessageReference) line: 74
        SimpleDispatchPolicy.dispatch(ConnectionContext, MessageReference,
MessageEvaluationContext, List) line: 50
        Topic.dispatch(ConnectionContext, Message) line: 443
        Topic.send(ConnectionContext, Message) line: 254
        ManagedTopicRegion(AbstractRegion).send(ConnectionContext, Message)
line: 225
        ManagedRegionBroker(RegionBroker).send(ConnectionContext, Message)
line: 345
        TransactionBroker.send(ConnectionContext, Message) line: 192
        AdvisoryBroker(BrokerFilter).send(ConnectionContext, Message) line:
113
        CompositeDestinationBroker.send(ConnectionContext, Message) line:
97
        BrokerService$2(MutableBrokerFilter).send(ConnectionContext,
Message) line: 126

ManagedTransportConnection(AbstractConnection).processMessage(Message) line:
377
        ActiveMQObjectMessage(ActiveMQMessage).visit(CommandVisitor) line:
590
        ManagedTransportConnection(AbstractConnection).service(Command)
line: 226
        TransportConnection$1.onCommand(Command) line: 62
        ResponseCorrelator.onCommand(Command) line: 91
        MutexTransport(TransportFilter).onCommand(Command) line: 63
        VMTransportServer$1(VMTransport).oneway(Command) line: 76
        MutexTransport.oneway(Command) line: 44
            => MutexTransport (id=314)
        ResponseCorrelator.oneway(Command) line: 58
        ActiveMQConnection.asyncSendPacket(Command) line: 1092
        ActiveMQSession.send(ActiveMQMessageProducer, ActiveMQDestination,
Message, int, int, long) line: 1553
        ActiveMQMessageProducer.send(Destination, Message, int, int, long)
line: 462
        ActiveMQMessageProducer.send(Message) line: 356
        JCAFlow.sendJmsMessage(Destination, Serializable, boolean, boolean)
line: 707
        JCAFlow.onInternalEndpointUnregistered(EndpointEvent, boolean) line:
462
        JCAFlow$1.internalEndpointUnregistered(EndpointEvent) line: 245
        EndpointRegistry.fireEvent(ServiceEndpoint, int) line: 575
        EndpointRegistry.unregisterInternalEndpoint(ComponentContext,
InternalEndpoint) line: 199
        Registry.deactivateEndpoint(ComponentContext, InternalEndpoint)
line: 205
        ComponentContextImpl.deactivateEndpoint(ServiceEndpoint) line:
157
        ReceiverComponent(PojoSupport).shutDown() line: 103
        ComponentMBeanImpl.doShutDown() line: 335
        ComponentRegistry.shutDown() line: 105
        Registry.shutDown() line: 142
        SpringJBIContainer(JBIContainer).shutDown() line: 601
        SpringJBIContainer.destroy() line: 184
        DisposableBeanAdapter.destroy() line: 97
        DefaultListableBeanFactory(AbstractBeanFactory).destroyBean(String,
Object) line: 1159

DefaultListableBeanFactory(AbstractBeanFactory).destroyDisposableBean(String)
line: 1131
        DefaultListableBeanFactory(AbstractBeanFactory).destroySingletons()
line: 660
        ClassPathXmlApplicationContext(AbstractApplicationContext).doClose()
line: 594
        ClassPathXmlApplicationContext(AbstractApplicationContext).close()
line: 563
        ClassPathXmlApplicationContext(AbstractApplicationContext).destroy()
line: 552
        JmsSpringJcaTest(SpringTestSupport).tearDown() line: 66
        JmsSpringJcaTest.tearDown() line: 52
        JmsSpringJcaTest(TestCase).runBare() line: 130
        TestResult$1.protect() line: 106
        TestResult.runProtected(Test, Protectable) line: 124
        TestResult.run(TestCase) line: 109
        JmsSpringJcaTest(TestCase).run(TestResult) line: 118
        TestSuite.runTest(Test, TestResult) line: 208
        TestSuite.run(TestResult) line: 203
        JUnit3TestReference.run(TestExecution) line: 128
        TestExecution.run(ITestReference[]) line: 38
        RemoteTestRunner.runTests(String[], String, TestExecution) line:
460
        RemoteTestRunner.runTests(TestExecution) line: 673
        RemoteTestRunner.run() line: 386
        RemoteTestRunner.main(String[]) line: 196
    Thread [ActiveMQ Session Task] (Suspended)
        MutexTransport.oneway(Command) line: 44
            ==> MutexTransport (id=419)
        ResponseCorrelator.oneway(Command) line: 58
        ActiveMQConnection.asyncSendPacket(Command) line: 1092
        ActiveMQSession.<init>(ActiveMQConnection, SessionId, int, boolean,
boolean) line: 227
        ActiveMQConnection.createSession(boolean, int) line: 274
        ServerSessionPoolImpl.createServerSessionImpl() line: 60
        ServerSessionPoolImpl.getServerSession() line: 113
        ActiveMQConnectionConsumer.dispatch(MessageDispatch) line: 135
        ActiveMQConnection.onCommand(Command) line: 1403
        ResponseCorrelator.onCommand(Command) line: 91
        MutexTransport(TransportFilter).onCommand(Command) line: 63
        VMTransport.oneway(Command) line: 76
        MutexTransport.oneway(Command) line: 44
            ==> MutexTransport (id=292)
        ResponseCorrelator.oneway(Command) line: 58
        ManagedTransportConnection(TransportConnection).dispatch(Command)
line: 211

ManagedTransportConnection(AbstractConnection).processDispatch(Command)
line: 628
        ManagedTransportConnection(AbstractConnection).dispatchSync(Command)
line: 605
        TopicSubscription.dispatch(MessageReference) line: 315
        TopicSubscription.add(MessageReference) line: 74
        SimpleDispatchPolicy.dispatch(ConnectionContext, MessageReference,
MessageEvaluationContext, List) line: 50
        Topic.dispatch(ConnectionContext, Message) line: 443
        Topic.send(ConnectionContext, Message) line: 254
        ManagedTopicRegion(AbstractRegion).send(ConnectionContext, Message)
line: 225
        ManagedRegionBroker(RegionBroker).send(ConnectionContext, Message)
line: 345
        TransactionBroker.send(ConnectionContext, Message) line: 192
        AdvisoryBroker(BrokerFilter).send(ConnectionContext, Message) line:
113
        CompositeDestinationBroker.send(ConnectionContext, Message) line:
97
        BrokerService$2(MutableBrokerFilter).send(ConnectionContext,
Message) line: 126

ManagedTransportConnection(AbstractConnection).processMessage(Message) line:
377
        ActiveMQObjectMessage(ActiveMQMessage).visit(CommandVisitor) line:
590
        ManagedTransportConnection(AbstractConnection).service(Command)
line: 226
        TransportConnection$1.onCommand(Command) line: 62
        ResponseCorrelator.onCommand(Command) line: 91
        MutexTransport(TransportFilter).onCommand(Command) line: 63
        VMTransportServer$1(VMTransport).oneway(Command) line: 76
        MutexTransport.oneway(Command) line: 44
            ==> MutexTransport (id=534)
        ResponseCorrelator.oneway(Command) line: 58
        ActiveMQConnection.asyncSendPacket(Command) line: 1092
        ActiveMQSession.send(ActiveMQMessageProducer, ActiveMQDestination,
Message, int, int, long) line: 1553
        ActiveMQMessageProducer.send(Destination, Message, int, int, long)
line: 462
        ActiveMQMessageProducer.send(Message) line: 356
        JCAFlow.sendJmsMessage(Destination, Serializable, boolean, boolean)
line: 707
        JCAFlow.onInternalEndpointRegistered(EndpointEvent, boolean) line:
445
        JCAFlow.onAdvisoryMessage(Object) line: 618
        JCAFlow$4.onMessage(Message) line: 336
        ActiveMQMessageConsumer.dispatch(MessageDispatch) line: 795
        ActiveMQSessionExecutor.dispatch(MessageDispatch) line: 96
        ActiveMQSessionExecutor.iterate() line: 149
        PooledTaskRunner.runTask() line: 110
        PooledTaskRunner.access$100(PooledTaskRunner) line: 25
        PooledTaskRunner$1.run() line: 43
        ThreadPoolExecutor$Worker.runTask(Runnable) line: 650
        ThreadPoolExecutor$Worker.run() line: 675
        Thread.run() line: 595
    Thread [Thread-87] (Suspended)
        MutexTransport.oneway(Command) line: 44
            ==> MutexTransport (id=292)
        ResponseCorrelator.oneway(Command) line: 58
        ManagedTransportConnection(TransportConnection).dispatch(Command)
line: 211
        TransportConnection$1.onCommand(Command) line: 64
        ResponseCorrelator.onCommand(Command) line: 91
        MutexTransport(TransportFilter).onCommand(Command) line: 63
        VMTransportServer$1(VMTransport).oneway(Command) line: 76
        MutexTransport.oneway(Command) line: 44
            ==> MutexTransport (id=419)
        ResponseCorrelator.asyncRequest(Command, ResponseCallback) line:
66
        ResponseCorrelator.request(Command) line: 71
        ActiveMQConnection.syncSendPacket(Command) line: 1112
        ActiveMQConnectionConsumer.<init>(ActiveMQConnection,
ServerSessionPool, ConsumerInfo) line: 85
        ActiveMQConnection.createConnectionConsumer(Destination, String,
ServerSessionPool, int, boolean) line: 1022
        ActiveMQEndpointWorker$1.run() line: 163
        WorkerContext.run() line: 291
        PooledExecutor$Worker.run() line: not available
        Thread.run() line: 595


--
Cheers,
Guillaume Nodet




--
Regards,
Hiram

Blog: http://hiramchirino.com

Reply via email to