Michael Yara created AMQ-4935:
---------------------------------

             Summary: Deadlock caused by Re-entrant lock with no locking thread
                 Key: AMQ-4935
                 URL: https://issues.apache.org/jira/browse/AMQ-4935
             Project: ActiveMQ
          Issue Type: Bug
          Components: activemq-pool
    Affects Versions: 5.9.0
         Environment: Oracle JRE 1.7.0 update 45
            Reporter: Michael Yara


We have a distributed application that uses ActiveMQ for communication between 
nodes. We are currently using ActiveMQ 5.9.0 running with Oracle JRE 1.7.0 
update 45. 

We are seeing some strange deadlock behavior in the ActiveMQ ThreadPoolExecutor 
when trying to serialize instances of ConcurrentHashMap. The thread dump can be 
seen at the following link:

http://pastebin.com/wmNxSF4p

We can see that there are two threads that are blocked waiting for a lock on 
some of the segments in a ConcurrentHashMap yet the thread dump does not 
indicate any threads that currently hold a lock on those objects. This lock 
does not occur all the time and can take around 5-10 messages before the 
deadlock occurs. I have been able to recreate this issue on two different 
physical machines.

Our test environment that generated this thread dump is as follows. Node A is 
the instance that thread dump was taken from. For testing both nodes are on the 
same physical machine.

Node A:
* In its own JVM instance.
* Runs an embedded ActiveMQ broker.
* Performs communication via vm transport and sends ObjectMessages via a 
TopicConnection.
* Has copyMessageOnSend=false
* Has ObjectMessageSerializationDefered=true

Node B:
* In its own JVM instance.
* Connects to Node A's broker via tcp transport.
* Sends BytesMessages serialized with Kryo and sent via a TopicConnection.
* Has copyMessageOnSend=false
* Has ObjectMessageSerializationDefered=false

Both nodes are set up to detect the type of incoming messages and deserialize 
them appropriately with kryo if it receives a BytesMessage or default 
serialization if it receives an ObjectMessage (handled by ActiveMQ).

The only thing I have found resembling this issue is the following link. I am 
no sure if it is related to this exact problem or not.

http://appcrawler.com/wordpress/2013/05/06/one-way-to-tell-if-a-thread-pool-is-hung/




--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

Reply via email to