ozeigermann    2005/01/09 11:10:11

  Modified:    transaction/src/java/org/apache/commons/transaction/locking
                        GenericLockManager.java
  Log:
  Reducing the number of unnecassary deadlock checks by moving the check out of 
the wait loop
  
  Revision  Changes    Path
  1.18      +15 -12    
jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/GenericLockManager.java
  
  Index: GenericLockManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/GenericLockManager.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- GenericLockManager.java   9 Jan 2005 15:12:11 -0000       1.17
  +++ GenericLockManager.java   9 Jan 2005 19:10:10 -0000       1.18
  @@ -168,8 +168,8 @@
           GenericLock.LockOwner lockWaiter = new 
GenericLock.LockOwner(ownerId, targetLockLevel,
                   compatibility, preferred);
           
  +        boolean acquired = false;
           try {
  -            boolean acquired = false;
               
               // detection for deadlocks and time outs is rather expensive, 
               // so we wait for the lock for a  
  @@ -190,19 +190,22 @@
                   addOwner(ownerId, lock);
                   return;
               }
  -            
  +        } catch (InterruptedException e) {
  +            throw new LockException("Interrupted", 
LockException.CODE_INTERRUPTED, resourceId);
  +        }
  +        try {
               lock.registerWaiter(lockWaiter);
               
  +            boolean deadlock = wouldDeadlock(ownerId, new HashSet());
  +            if (deadlock) {
  +                throw new LockException("Lock would cause deadlock",
  +                        LockException.CODE_DEADLOCK_VICTIM, resourceId);
  +            }
  +
               while (!acquired && waitEnd > now) {
               
                   // first be sure all locks are stolen from owners that have 
already timed out
                   releaseTimedOutOwners();
  -
  -                boolean deadlock = wouldDeadlock(ownerId, new HashSet());
  -                if (deadlock) {
  -                    throw new LockException("Lock would cause deadlock",
  -                            LockException.CODE_DEADLOCK_VICTIM, resourceId);
  -                }
   
                   // if there are owners we conflict with lets see if one of 
them globally times
                   // out earlier than this lock, if so we will wake up then to 
check again
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to