You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ck...@apache.org on 2013/08/21 10:17:15 UTC
svn commit: r1516110 -
/jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java
Author: ckoell
Date: Wed Aug 21 08:17:14 2013
New Revision: 1516110
URL: http://svn.apache.org/r1516110
Log:
JCR-3645 LockManagerImpl do not prevent the internal PathMap in all relevant Methods
Modified:
jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java
Modified: jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java?rev=1516110&r1=1516109&r2=1516110&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java Wed Aug 21 08:17:14 2013
@@ -185,12 +185,13 @@ public class LockManagerImpl
holder = sysSession;
}
try {
- acquire();
+ acquire();
+ // FIXME: This session access is not thread-safe!
unlock(holder.getNodeById(id));
} catch (RepositoryException e) {
log.warn("Unable to expire the lock " + id, e);
} finally {
- release();
+ release();
}
}
}
@@ -653,12 +654,17 @@ public class LockManagerImpl
public void checkLock(Path path, Session session)
throws LockException, RepositoryException {
- PathMap.Element<LockInfo> element = lockMap.map(path, false);
- LockInfo info = element.get();
- if (info != null) {
- if (element.hasPath(path) || info.isDeep()) {
- checkLock(info, session);
+ acquire();
+ try {
+ PathMap.Element<LockInfo> element = lockMap.map(path, false);
+ LockInfo info = element.get();
+ if (info != null) {
+ if (element.hasPath(path) || info.isDeep()) {
+ checkLock(info, session);
+ }
}
+ } finally {
+ release();
}
}
@@ -687,18 +693,23 @@ public class LockManagerImpl
*/
public void checkUnlock(Session session, NodeImpl node)
throws LockException, RepositoryException {
-
- // check whether node is locked by this session
- PathMap.Element<LockInfo> element =
- lockMap.map(getPath((SessionImpl) session, node.getId()), true);
- if (element == null) {
- throw new LockException("Node not locked: " + node);
- }
- LockInfo info = element.get();
- if (info == null) {
- throw new LockException("Node not locked: " + node);
+ acquire();
+
+ try {
+ // check whether node is locked by this session
+ PathMap.Element<LockInfo> element =
+ lockMap.map(getPath((SessionImpl) session, node.getId()), true);
+ if (element == null) {
+ throw new LockException("Node not locked: " + node);
+ }
+ LockInfo info = element.get();
+ if (info == null) {
+ throw new LockException("Node not locked: " + node);
+ }
+ checkUnlock(info, session);
+ } finally {
+ release();
}
- checkUnlock(info, session);
}
/**
@@ -727,6 +738,8 @@ public class LockManagerImpl
*/
public void addLockToken(SessionImpl session, String lt) throws LockException, RepositoryException {
try {
+ acquire();
+
NodeId id = LockInfo.parseLockToken(lt);
NodeImpl node = (NodeImpl) sysSession.getItemManager().getItem(id);
@@ -753,6 +766,8 @@ public class LockManagerImpl
String msg = "Bad lock token: " + e.getMessage();
log.warn(msg);
throw new LockException(msg);
+ } finally {
+ release();
}
}
@@ -763,6 +778,8 @@ public class LockManagerImpl
throws LockException, RepositoryException {
try {
+ acquire();
+
NodeId id = LockInfo.parseLockToken(lt);
NodeImpl node = (NodeImpl) sysSession.getItemManager().getItem(id);
@@ -786,6 +803,8 @@ public class LockManagerImpl
String msg = "Bad lock token: " + e.getMessage();
log.warn(msg);
throw new LockException(msg);
+ } finally {
+ release();
}
}
@@ -1064,7 +1083,8 @@ public class LockManagerImpl
* add and remove operations on nodes with the same UUID into a move
* operation.
*/
- private Iterator<HierarchyEvent> consolidateEvents(EventIterator events) {
+ @SuppressWarnings("unchecked")
+ private Iterator<HierarchyEvent> consolidateEvents(EventIterator events) {
LinkedMap eventMap = new LinkedMap();
while (events.hasNext()) {