You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Timothy Bish (JIRA)" <ji...@apache.org> on 2013/04/27 00:52:16 UTC
[jira] [Resolved] (AMQ-4351) Deadlock when unsubscribing durable
subscriber
[ https://issues.apache.org/jira/browse/AMQ-4351?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Timothy Bish resolved AMQ-4351.
-------------------------------
Resolution: Fixed
Fixed the stats issue on trunk
> Deadlock when unsubscribing durable subscriber
> ----------------------------------------------
>
> Key: AMQ-4351
> URL: https://issues.apache.org/jira/browse/AMQ-4351
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.7.0, 5.8.0
> Environment: Setup:
> Active MQ 5.7.0 with master/slave using JDBC store
> Approx 3 - 5 concurrent durable subscribers
> Approx 5 messages / sec
> Reporter: Tim Lammens
> Assignee: Timothy Bish
> Labels: patch
> Fix For: 5.9.0
>
> Attachments: ActiveMQUnsubscribeTest.java, dispatcher.patch
>
>
> We started using durable subscribers a week ago, and after the 4th durable subscriber unsubscribed (due to 1 hour inactivity), the system deadlocked. If the "Durable Subscriber Cleanup Timer" goes of at the wrong time, your entire server locks up.
> Setup:
> Active MQ 5.7.0 with master/slave using JDBC store
> Approx 3 - 5 concurrent durable subscribers
> Approx 5 messages / sec
> Active MQ checks every 1 minute for subscribers which have been offline for 1 hour.
> Locked threads:
> "ActiveMQ Transport: tcp:///79.125.71.104:48082@8090":
> at org.apache.activemq.broker.region.Topic.doMessageSend(Topic.java:446)
> - waiting to lock <0x00000000c6228480> (a org.apache.activemq.broker.region.Topic)
> at org.apache.activemq.broker.region.Topic.send(Topic.java:427)
> at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:407)
> at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:503)
> "ActiveMQ Transport: tcp:///79.125.71.104:47590@8090":
> at org.apache.activemq.broker.region.PrefetchSubscription.add(PrefetchSubscription.java:142)
> - waiting to lock <0x00000000c66ba050> (a java.lang.Object)
> at org.apache.activemq.broker.region.DurableTopicSubscription.add(DurableTopicSubscription.java:243)
> at org.apache.activemq.broker.region.policy.StrictOrderDispatchPolicy.dispatch(StrictOrderDispatchPolicy.java:58)
> "ActiveMQ Durable Subscriber Cleanup Timer":
> at org.apache.activemq.broker.region.Topic.deactivate(Topic.java:288)
> - waiting to lock <0x00000000c6250670> (a java.util.concurrent.CopyOnWriteArrayList)
> at org.apache.activemq.broker.region.DurableTopicSubscription.deactivate(DurableTopicSubscription.java:184)
> - locked <0x00000000c66ba060> (a java.lang.Object)
> - locked <0x00000000c66ba050> (a java.lang.Object)
> at org.apache.activemq.broker.region.Topic.deleteSubscription(Topic.java:195)
> at org.apache.activemq.broker.region.TopicRegion.removeSubscription(TopicRegion.java:199)
> at org.apache.activemq.broker.region.TopicRegion.doCleanup(TopicRegion.java:99)
> I have attached a patch which fixes the problem.
> Since there is only one dispatch policy per Topic, synchronisation can happen on the DispatchPolicy instead of on the consumers object which causes the deadlock.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira