Return-Path: Delivered-To: apmail-jackrabbit-dev-archive@www.apache.org Received: (qmail 81730 invoked from network); 13 Dec 2006 14:34:44 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 13 Dec 2006 14:34:44 -0000 Received: (qmail 91529 invoked by uid 500); 13 Dec 2006 14:34:50 -0000 Delivered-To: apmail-jackrabbit-dev-archive@jackrabbit.apache.org Received: (qmail 91502 invoked by uid 500); 13 Dec 2006 14:34:50 -0000 Mailing-List: contact dev-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list dev@jackrabbit.apache.org Received: (qmail 91493 invoked by uid 99); 13 Dec 2006 14:34:50 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Dec 2006 06:34:50 -0800 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Dec 2006 06:34:42 -0800 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 5071C71413D for ; Wed, 13 Dec 2006 06:34:22 -0800 (PST) Message-ID: <19073735.1166020462326.JavaMail.jira@brutus> Date: Wed, 13 Dec 2006 06:34:22 -0800 (PST) From: "Przemo Pakulski (JIRA)" To: dev@jackrabbit.apache.org Subject: [jira] Commented: (JCR-672) Deadlock on concurrent save/checkin operations possible In-Reply-To: <9709571.1165921341093.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ http://issues.apache.org/jira/browse/JCR-672?page=comments#action_12458141 ] Przemo Pakulski commented on JCR-672: ------------------------------------- You're right deadlock has not been introduced by JCR-546, but it seems that currently is easier to reproduce it. Inconsistent order of acquiring locks was already there. SharedItemStateManager read lock should be acquired first, or if both components (SharedItemStateManager, AbstractVersionManager) ae really coupled together, maybe solution is to get rid of one and use single lock instead. > Deadlock on concurrent save/checkin operations possible > ------------------------------------------------------- > > Key: JCR-672 > URL: http://issues.apache.org/jira/browse/JCR-672 > Project: Jackrabbit > Issue Type: Bug > Components: versioning > Reporter: Przemo Pakulski > > Save and checkin operations are trying to acquire 2 locks in different order, what leads to deadlock. > ->save > 1.SharedItemStateManager.acquireWriteLock > 2.AbstractVersionManager.acquireWriteLock -> locked > ->checkin > 1.AbstractVersionManager.acquireWriteLock > 2.SharedItemStateManager.acquireReadLock -> locked > "Thread-4" prio=6 tid=0x0312d840 nid=0x824 in Object.wait() [0x03cef000..0x03cefa68] > at java.lang.Object.wait(Native Method) > - waiting on <0x23210968> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock) > at java.lang.Object.wait(Unknown Source) > at EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock.acquire(Unknown Source) > - locked <0x23210968> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock) > at org.apache.jackrabbit.core.version.AbstractVersionManager.acquireWriteLock(AbstractVersionManager.java:124) > at org.apache.jackrabbit.core.version.VersionManagerImpl.setNodeReferences(VersionManagerImpl.java:413) > at org.apache.jackrabbit.core.version.VersionItemStateProvider.setNodeReferences(VersionItemStateProvider.java:125) > at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:699) > at org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:810) > at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:326) > at org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:313) > at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:302) > at org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:295) > at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1204) > - locked <0x2332eaa0> (a org.apache.jackrabbit.core.XASessionImpl) > at JrTestDeadlock.run(JrTestDeadlock.java:87) > "Thread-3" prio=6 tid=0x0312db18 nid=0xa04 in Object.wait() [0x03caf000..0x03cafae8] > at java.lang.Object.wait(Native Method) > - waiting on <0x232d1360> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$ReaderLock) > at java.lang.Object.wait(Unknown Source) > at EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$ReaderLock.acquire(Unknown Source) > - locked <0x232d1360> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$ReaderLock) > at org.apache.jackrabbit.core.state.SharedItemStateManager.acquireReadLock(SharedItemStateManager.java:1361) > at org.apache.jackrabbit.core.state.SharedItemStateManager.hasItemState(SharedItemStateManager.java:270) > at org.apache.jackrabbit.core.state.LocalItemStateManager.hasItemState(LocalItemStateManager.java:180) > at org.apache.jackrabbit.core.state.XAItemStateManager.hasItemState(XAItemStateManager.java:252) > at org.apache.jackrabbit.core.state.SessionItemStateManager.hasItemState(SessionItemStateManager.java:188) > at org.apache.jackrabbit.core.ItemManager.itemExists(ItemManager.java:256) > at org.apache.jackrabbit.core.NodeImpl.hasProperty(NodeImpl.java:1509) > at org.apache.jackrabbit.core.version.InternalFrozenNodeImpl.checkin(InternalFrozenNodeImpl.java:276) > at org.apache.jackrabbit.core.version.InternalFrozenNodeImpl.checkin(InternalFrozenNodeImpl.java:248) > at org.apache.jackrabbit.core.version.InternalVersionHistoryImpl.checkin(InternalVersionHistoryImpl.java:440) > at org.apache.jackrabbit.core.version.AbstractVersionManager.checkin(AbstractVersionManager.java:397) > at org.apache.jackrabbit.core.version.VersionManagerImpl$2.run(VersionManagerImpl.java:289) > at org.apache.jackrabbit.core.version.VersionManagerImpl$DynamicESCFactory.doSourced(VersionManagerImpl.java:611) > - locked <0x2320c5d8> (a org.apache.jackrabbit.core.version.VersionManagerImpl$DynamicESCFactory) > at org.apache.jackrabbit.core.version.VersionManagerImpl.checkin(VersionManagerImpl.java:285) > at org.apache.jackrabbit.core.version.XAVersionManager.checkin(XAVersionManager.java:161) > at org.apache.jackrabbit.core.NodeImpl.checkin(NodeImpl.java:2944) > at JrTestDeadlock.run(JrTestDeadlock.java:103) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira