You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by dp...@apache.org on 2005/06/17 14:54:03 UTC

svn commit: r191150 - /incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockInfo.java /incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java

Author: dpfister
Date: Fri Jun 17 05:54:02 2005
New Revision: 191150

URL: http://svn.apache.org/viewcvs?rev=191150&view=rev
Log:
JCR-137 Open-scoped locks may be lost on restart and might not be transferrable

Modified:
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockInfo.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockInfo.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockInfo.java?rev=191150&r1=191149&r2=191150&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockInfo.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockInfo.java Fri Jun 17 05:54:02 2005
@@ -174,12 +174,21 @@
     /**
      * {@inheritDoc}
      * <p/>
-     * When the owning session is logging out, we should unlock the node on
-     * behalf of the user currently holding it.
+     * When the owning session is logging out, we have to perform some
+     * operations depending on the lock type.
+     * (1) If the lock was session-scoped, we unlock the node.
+     * (2) If the lock was open-scoped, we remove the lock token
+     *     from the session.
      */
     public void loggingOut(SessionImpl session) {
         if (live) {
-            lockMgr.unlock(this);
+            if (sessionScoped) {
+                lockMgr.unlock(this);
+            } else {
+                if (session.equals(lockHolder)) {
+                    lockHolder = null;
+                }
+            }
         }
     }
 

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java?rev=191150&r1=191149&r2=191150&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java Fri Jun 17 05:54:02 2005
@@ -151,7 +151,9 @@
      */
     private void reapplyLock(LockToken lockToken) {
         try {
-            NodeImpl node = (NodeImpl) session.getNodeByUUID(lockToken.uuid);
+            NodeId id = new NodeId(lockToken.uuid);
+
+            NodeImpl node = (NodeImpl) session.getItemManager().getItem(id);
             Path path = node.getPrimaryPath();
 
             LockInfo info = new LockInfo(this, lockToken, false,
@@ -241,9 +243,7 @@
         SessionImpl session = (SessionImpl) node.getSession();
         info.setLockHolder(session);
         info.setLive(true);
-        if (info.sessionScoped) {
-            session.addListener(info);
-        }
+        session.addListener(info);
         session.addLockToken(info.lockToken.toString(), false);
         lockMap.put(path, info);
         return new LockImpl(info, node);