[jbosscache-commits] JBoss Cache SVN: r7969 - core/trunk/src/main/java/org/jboss/cache/mvcc.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Thu Apr 2 07:30:08 EDT 2009
Author: manik.surtani at jboss.com
Date: 2009-04-02 07:30:07 -0400 (Thu, 02 Apr 2009)
New Revision: 7969
Modified:
core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java
Log:
JBCACHE-1497 When adding node, CacheLoaderInterceptor locks child node before MVCCLockingInterceptor locks parent
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java 2009-04-02 10:04:04 UTC (rev 7968)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java 2009-04-02 11:30:07 UTC (rev 7969)
@@ -179,7 +179,13 @@
* @throws InterruptedException if interrupted
*/
@SuppressWarnings("unchecked")
- public ReadCommittedNode wrapNodeForWriting(InvocationContext context, Fqn fqn, boolean lockForWriting, boolean createIfAbsent, boolean includeInvalidNodes, boolean forRemoval, boolean force) throws InterruptedException {
+ public ReadCommittedNode wrapNodeForWriting(InvocationContext context, Fqn fqn, boolean lockForWriting, boolean createIfAbsent, boolean includeInvalidNodes, boolean forRemoval, boolean force) throws InterruptedException
+ {
+ return wrapNodeForWriting(context, fqn, lockForWriting, createIfAbsent, includeInvalidNodes, forRemoval, force, false);
+ }
+
+ public ReadCommittedNode wrapNodeForWriting(InvocationContext context, Fqn fqn, boolean lockForWriting, boolean createIfAbsent, boolean includeInvalidNodes, boolean forRemoval, boolean force, boolean childIsNull) throws InterruptedException
+ {
Fqn parentFqn = null;
ReadCommittedNode n = (ReadCommittedNode) context.lookUpNode(fqn);
if (createIfAbsent && n != null && n.isNullNode()) n = null;
@@ -242,13 +248,13 @@
if (n == null && force)
{
parentFqn = fqn.getParent();
- if (isParentLockNeeded(parentFqn, context)) wrapNodeForWriting(context, parentFqn, true, false, includeInvalidNodes, false, force);
+ if (isParentLockNeeded(parentFqn, context) && !childIsNull) wrapNodeForWriting(context, parentFqn, true, false, includeInvalidNodes, false, force, true);
acquireLock(context, fqn);
}
// now test if we need to lock the parent as well.
- if ((n != null || force) && forRemoval && (parentFqn == null ? parentFqn = fqn.getParent() : parentFqn) != null && isParentLockNeeded(parentFqn, context))
- wrapNodeForWriting(context, parentFqn, true, false, includeInvalidNodes, false, force);
+ if ((n != null || force) && forRemoval && (parentFqn == null ? parentFqn = fqn.getParent() : parentFqn) != null && isParentLockNeeded(parentFqn, context) && !childIsNull)
+ wrapNodeForWriting(context, parentFqn, true, false, includeInvalidNodes, false, force, n == null);
return n;
}
More information about the jbosscache-commits
mailing list