You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Alessandro Monguzzi (Reopened) (JIRA)" <ji...@apache.org> on 2012/03/12 14:12:41 UTC
[jira] [Reopened] (AMQ-3760) Deadlock on Java Client when onMessage
executes a synchronized method.
[ https://issues.apache.org/jira/browse/AMQ-3760?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alessandro Monguzzi reopened AMQ-3760:
--------------------------------------
I disagree with the closure of this issue.
The spec cannot allow a deadlock and a synchronized method is not an uncommon case. Either a method can be called or it can't, the behaviour cannot be unpredictable.
If none Session method can be called (apart from close) when a Session is running, then I could not call the createObjectMessage() method also. I cannot believe that.
I would leave this bug open and explore a solution; closing the bug in this moment is like hiding the issue.
> Deadlock on Java Client when onMessage executes a synchronized method.
> ----------------------------------------------------------------------
>
> Key: AMQ-3760
> URL: https://issues.apache.org/jira/browse/AMQ-3760
> Project: ActiveMQ
> Issue Type: Bug
> Components: JMS client
> Affects Versions: 5.5.1
> Environment: java version "1.6.0_30"
> Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
> Java HotSpot(TM) Server VM (build 20.5-b03, mixed mode)
> OS: SunOs 10/06
> Reporter: Alessandro Monguzzi
> Labels: features
> Attachments: ActiveMQDeadlock.zip
>
>
> Create a class with two synchronized methods synchMethod1 and synchMethod2.
> syncMethod1 is invoked inside a messageListener object and only prints a message on stdout.
> syncMethod2 creates a new MessageConsumer with a new instance of MessageListener. All the MessageConsumers created by synchMethod2 share the same session.
> All the consumers listen on the same Topic named "myDest".
> Create an infinite cycle that:
> 1) send a message on Topic "myDest"
> 2) invoke syncMethod2
> 3) waits 10ms
> In attach the unit test source.
> As result, a deadlock is created between the "ActiveMQ Session Task" thread entering in syncMethod1 having the ActiveMessageConsumer's mutex and my other thread executing the syncMethod2 when the SimplePriorityMessageDispatchChannel.stop() method is invoked.
> This means that it's not possible to create or change MessageListeners on a running session, even if the code seems to handle this case stopping and restarting the session.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira