dirkv 01/09/22 05:22:08
Modified: src/share/org/apache/slide/lock LockImpl.java
Log:
fix different behaviour in enumerateLocks with inherited true/false
(do not return locks that are timed-out)
Revision Changes Path
1.22 +32 -25 jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java
Index: LockImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- LockImpl.java 2001/09/13 08:14:07 1.21
+++ LockImpl.java 2001/09/22 12:22:08 1.22
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java,v
1.21 2001/09/13 08:14:07 juergen Exp $
- * $Revision: 1.21 $
- * $Date: 2001/09/13 08:14:07 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java,v
1.22 2001/09/22 12:22:08 dirkv Exp $
+ * $Revision: 1.22 $
+ * $Date: 2001/09/22 12:22:08 $
*
* ====================================================================
*
@@ -78,7 +78,7 @@
* Lock helper class.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a>
- * @version $Revision: 1.21 $
+ * @version $Revision: 1.22 $
*/
public final class LockImpl implements Lock {
@@ -304,7 +304,6 @@
}
-
public Enumeration enumerateLocks(SlideToken slideToken, String objectUri)
throws ServiceAccessException, ObjectNotFoundException,
LockTokenNotFoundException {
@@ -312,7 +311,6 @@
return enumerateLocks(slideToken, objectUri, true);
}
-
public Enumeration enumerateLocks(SlideToken slideToken, String objectUri,
boolean inherited)
throws ServiceAccessException, ObjectNotFoundException,
@@ -321,34 +319,43 @@
// We retrieve the LockStore service from the namespace.
Uri subjectUri = namespace.getUri(slideToken, objectUri);
+ Enumeration scopes = null;
if (inherited) {
// traverse the namespace up to the root node, and add any locks
// found in the process
- Vector locksVector = new Vector();
- Enumeration scopes = subjectUri.getScopes();
- while (scopes.hasMoreElements()) {
- String currentScope = (String) scopes.nextElement();
- Uri currentScopeUri =
- namespace.getUri(slideToken, currentScope);
- Enumeration currentLocks =
- currentScopeUri.getStore().enumerateLocks(currentScopeUri);
- while (currentLocks.hasMoreElements()) {
- NodeLock currentLockToken =
- (NodeLock) currentLocks.nextElement();
- if (currentLockToken.hasExpired()) {
+ scopes = subjectUri.getScopes();
+ } else {
+ // only return the locks that explicitly and directly lock the
+ // given subject
+ Vector scopeVector = new Vector();
+ scopeVector.add(subjectUri.toString());
+ scopes = scopeVector.elements();
+ }
+ Vector locksVector = new Vector();
+ while (scopes.hasMoreElements()) {
+ String currentScope = (String) scopes.nextElement();
+ Uri currentScopeUri =
+ namespace.getUri(slideToken, currentScope);
+ Enumeration currentLocks =
+ currentScopeUri.getStore().enumerateLocks(currentScopeUri);
+ while (currentLocks.hasMoreElements()) {
+ NodeLock currentLockToken =
+ (NodeLock) currentLocks.nextElement();
+ if (currentLockToken.hasExpired()) {
+ // FIXME: do cleanup of locks someplace else
+ try {
currentScopeUri.getStore()
.removeLock(currentScopeUri, currentLockToken);
- } else {
- locksVector.addElement(currentLockToken);
}
+ catch (LockTokenNotFoundException ex) {
+ // ignore
+ }
+ } else {
+ locksVector.addElement(currentLockToken);
}
}
- return locksVector.elements();
- } else {
- // only return the locks that explicitly and directly lock the
- // given subject
- return subjectUri.getStore().enumerateLocks(subjectUri);
}
+ return locksVector.elements();
}