You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2014/01/22 22:23:14 UTC

svn commit: r1560515 - /manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/LockGate.java

Author: kwright
Date: Wed Jan 22 21:23:13 2014
New Revision: 1560515

URL: http://svn.apache.org/r1560515
Log:
Get it working, at least.  No hangs, but takes much longer than before

Modified:
    manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/LockGate.java

Modified: manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/LockGate.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/LockGate.java?rev=1560515&r1=1560514&r2=1560515&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/LockGate.java (original)
+++ manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/LockGate.java Wed Jan 22 21:23:13 2014
@@ -67,6 +67,27 @@ import org.apache.manifoldcf.core.interf
 * The problem is that (A) has already obtained permission, but cannot obtain the lock.  (B) is somehow blocking
 * (A) from obtaining the lock even though it has not yet taken its own lock!  Or, maybe it has, and we don't see it in
 * the stack trace.
+* Another example: (C)
+	at java.lang.Object.wait(Native Method)
+	- waiting on <0x00000000ffbdc038> (a org.apache.manifoldcf.core.lockmanager.LockGate)
+	at java.lang.Object.wait(Object.java:503)
+	at org.apache.manifoldcf.core.lockmanager.LockGate.waitForPermission(LockGate.java:91)
+	- locked <0x00000000ffbdc038> (a org.apache.manifoldcf.core.lockmanager.LockGate)
+	at org.apache.manifoldcf.core.lockmanager.LockGate.enterReadLock(LockGate.java:211)
+	at org.apache.manifoldcf.core.lockmanager.BaseLockManager.enter(BaseLockManager.java:1532)
+	at org.apache.manifoldcf.core.lockmanager.BaseLockManager.enterLocks(BaseLockManager.java:813)
+	at org.apache.manifoldcf.core.lockmanager.LockManager.enterLocks(LockManager.java:355)
+* and (D):
+	at java.lang.Object.wait(Native Method)
+	- waiting on <0x00000000ffbdd2f8> (a org.apache.manifoldcf.core.lockmanager.LockObject)
+	at java.lang.Object.wait(Object.java:503)
+	at org.apache.manifoldcf.core.lockmanager.LockObject.enterWriteLock(LockObject.java:83)
+	- locked <0x00000000ffbdd2f8> (a org.apache.manifoldcf.core.lockmanager.LockObject)
+	at org.apache.manifoldcf.core.lockmanager.LockGate.enterWriteLock(LockGate.java:132)
+	at org.apache.manifoldcf.core.lockmanager.BaseLockManager.enter(BaseLockManager.java:1483)
+	at org.apache.manifoldcf.core.lockmanager.BaseLockManager.enterLocks(BaseLockManager.java:813)
+	at org.apache.manifoldcf.core.lockmanager.LockManager.enterLocks(LockManager.java:355)
+* Problem here: The LockGate 0x00000000ffbdc038 has no other instance anywhere, which should not be able to happen.
 * Debugging must entail dumping ALL outstanding locks periodically -- and who holds each.
 */
 public class LockGate
@@ -115,22 +136,22 @@ public class LockGate
     }
     catch (InterruptedException e)
     {
-      threadRequests.remove(threadID);
+      freePermission(threadID);
       throw e;
     }
     catch (ExpiredObjectException e)
     {
-      threadRequests.remove(threadID);
+      freePermission(threadID);
       throw e;
     }
     catch (Error e)
     {
-      threadRequests.remove(threadID);
+      freePermission(threadID);
       throw e;
     }
     catch (RuntimeException e)
     {
-      threadRequests.remove(threadID);
+      freePermission(threadID);
       throw e;
     }
   }
@@ -147,28 +168,28 @@ public class LockGate
   public void enterWriteLock(Long threadID)
     throws ManifoldCFException, InterruptedException, ExpiredObjectException
   {
-    //waitForPermission(threadID);
+    waitForPermission(threadID);
     try
     {
       lockObject.enterWriteLock();
     }
     finally
     {
-      //freePermission(threadID);
+      freePermission(threadID);
     }
   }
   
   public void enterWriteLockNoWait(Long threadID)
     throws ManifoldCFException, LockException, LocalLockException, InterruptedException, ExpiredObjectException
   {
-    //waitForPermission(threadID);
+    waitForPermission(threadID);
     try
     {
       lockObject.enterWriteLockNoWait();
     }
     finally
     {
-      //freePermission(threadID);
+      freePermission(threadID);
     }
   }
   
@@ -188,28 +209,28 @@ public class LockGate
   public void enterNonExWriteLock(Long threadID)
     throws ManifoldCFException, InterruptedException, ExpiredObjectException
   {
-    //waitForPermission(threadID);
+    waitForPermission(threadID);
     try
     {
       lockObject.enterNonExWriteLock();
     }
     finally
     {
-      //freePermission(threadID);
+      freePermission(threadID);
     }
   }
   
   public void enterNonExWriteLockNoWait(Long threadID)
     throws ManifoldCFException, LockException, LocalLockException, InterruptedException, ExpiredObjectException
   {
-    //waitForPermission(threadID);
+    waitForPermission(threadID);
     try
     {
       lockObject.enterNonExWriteLockNoWait();
     }
     finally
     {
-      //freePermission(threadID);
+      freePermission(threadID);
     }
   }
   
@@ -229,28 +250,28 @@ public class LockGate
   public void enterReadLock(Long threadID)
     throws ManifoldCFException, InterruptedException, ExpiredObjectException
   {
-    //waitForPermission(threadID);
+    waitForPermission(threadID);
     try
     {
       lockObject.enterReadLock();
     }
     finally
     {
-      //freePermission(threadID);
+      freePermission(threadID);
     }
   }
   
   public void enterReadLockNoWait(Long threadID)
     throws ManifoldCFException, LockException, LocalLockException, InterruptedException, ExpiredObjectException
   {
-    //waitForPermission(threadID);
+    waitForPermission(threadID);
     try
     {
       lockObject.enterReadLockNoWait();
     }
     finally
     {
-      //freePermission(threadID);
+      freePermission(threadID);
     }
   }