Cluster: Node type register/unregister deadlock
-----------------------------------------------

                 Key: JCR-2866
                 URL: https://issues.apache.org/jira/browse/JCR-2866
             Project: Jackrabbit Content Repository
          Issue Type: Bug
          Components: clustering
            Reporter: Thomas Mueller
            Assignee: Thomas Mueller
             Fix For: 2.2.2


A deadlock can occur when two cluster nodes concurrently register or unregister 
node types.

Reason: 

NodeTypeRegistry.registerNodeTypes is synchronized, and calls 
eventChannel.registered(ntDefs), which calls AbstractJournal.lockAndSync(), 
which tries to lock AbstractJournal.rwLock.

On the other hand, AbstractJournal.sync() locks AbstractJournal.rwLock, then 
calls NodeTypeRecord.process, which calls NodeTypeRegistry.unregisterNodeTypes, 
which is also synchronized.

Possible solutions: Either 

- NodeTypeRegistry doesn't synchronize on the object when calling a 
eventChannel method,

- or NodeTypeRegistry locks AbstractJournal.rwLock before synchronizing.

There might be other solutions.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to