You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by Guillaume Nodet <gn...@gmail.com> on 2006/08/11 15:25:57 UTC

Deadlock on 4.0.2

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

Re: Deadlock on 4.0.2

Posted by Hiram Chirino <hi...@hiramchirino.com>.
I just applied the simple fix of enabling the setter in in the 4.0
branch. If anybody feels strongly that we need to fix the naming
inconsistencies in that branch too open a jira an we'll consider it.

On 8/11/06, Hiram Chirino <hi...@hiramchirino.com> wrote:
> Yep it's been fixed in 4.1 but not in the 4.0 branch yet.  The commit
> that fixed this was revision 418966:
> http://mail-archives.apache.org/mod_mbox/geronimo-activemq-commits/200607.mbox/%3C20060704095441.D0FCA1A983A@eris.apache.org%3E
>
> It's also got an issue:
> http://issues.apache.org/activemq/browse/AMQ-792
>
> I wonder what you guys think about porting this fix to the 4.0 branch?
>  Since it does slightly change the API (to make it consistent) it
> could break folks that are calling this method directly so on one hand
> we should not make that kind of change to the 4.0 branch.
>
> The inconstancy of the naming is a bug IMO so I think we should fix it.
>
> On 8/11/06, Guillaume Nodet <gn...@gmail.com> wrote:
> > Btw, the docs on http://www.activemq.org/site/consumer-dispatch-async.html
> > refer to dispatchAsync but the code uses asyncDispatch.
> > I guess this is an oversight, right ?
> >
> > On 8/11/06, Hiram Chirino <hi...@hiramchirino.com> wrote:
> > >
> > > 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 <gn...@gmail.com> 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
> > >
> >
> >
> >
> > --
> > Cheers,
> > Guillaume Nodet
> >
> >
>
>
> --
> Regards,
> Hiram
>
> Blog: http://hiramchirino.com
>


-- 
Regards,
Hiram

Blog: http://hiramchirino.com

Re: Deadlock on 4.0.2

Posted by Hiram Chirino <hi...@hiramchirino.com>.
Yep it's been fixed in 4.1 but not in the 4.0 branch yet.  The commit
that fixed this was revision 418966:
http://mail-archives.apache.org/mod_mbox/geronimo-activemq-commits/200607.mbox/%3C20060704095441.D0FCA1A983A@eris.apache.org%3E

It's also got an issue:
http://issues.apache.org/activemq/browse/AMQ-792

I wonder what you guys think about porting this fix to the 4.0 branch?
 Since it does slightly change the API (to make it consistent) it
could break folks that are calling this method directly so on one hand
we should not make that kind of change to the 4.0 branch.

The inconstancy of the naming is a bug IMO so I think we should fix it.

On 8/11/06, Guillaume Nodet <gn...@gmail.com> wrote:
> Btw, the docs on http://www.activemq.org/site/consumer-dispatch-async.html
> refer to dispatchAsync but the code uses asyncDispatch.
> I guess this is an oversight, right ?
>
> On 8/11/06, Hiram Chirino <hi...@hiramchirino.com> wrote:
> >
> > 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 <gn...@gmail.com> 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
> >
>
>
>
> --
> Cheers,
> Guillaume Nodet
>
>


-- 
Regards,
Hiram

Blog: http://hiramchirino.com

Re: Deadlock on 4.0.2

Posted by Guillaume Nodet <gn...@gmail.com>.
Btw, the docs on http://www.activemq.org/site/consumer-dispatch-async.html
refer to dispatchAsync but the code uses asyncDispatch.
I guess this is an oversight, right ?

On 8/11/06, Hiram Chirino <hi...@hiramchirino.com> wrote:
>
> 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 <gn...@gmail.com> 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
>



-- 
Cheers,
Guillaume Nodet

Re: Deadlock on 4.0.2

Posted by Hiram Chirino <hi...@hiramchirino.com>.
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 <gn...@gmail.com> 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