Author: ozeigermann Date: Fri Aug 17 07:31:09 2007 New Revision: 567058 URL: http://svn.apache.org/viewvc?view=rev&rev=567058 Log: Simplified out necessary steps from release
Modified: commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/locks/ResourceRWLock.java Modified: commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/locks/ResourceRWLock.java URL: http://svn.apache.org/viewvc/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/locks/ResourceRWLock.java?view=diff&rev=567058&r1=567057&r2=567058 ============================================================================== --- commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/locks/ResourceRWLock.java (original) +++ commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/locks/ResourceRWLock.java Fri Aug 17 07:31:09 2007 @@ -201,26 +201,26 @@ if (current != getExclusiveOwnerThread()) return true; setExclusiveOwnerThread(null); - setState(readerThreads.size()); + // if we release an exclusive lock, this can only mean we are the + // only who possibly could and the only possible outcome is that + // afterwards there are no more locks + setState(NO_LOCK); return true; } protected boolean tryReleaseShared(int unused) { Thread current = Thread.currentThread(); + // if there had been a read lock before, we simply count the state + // down by one if (readerThreads.remove(current)) { while (true) { int c = getState(); int nextc = c - 1; - if (c == WRITE_LOCK) { - return true; - } - if (!compareAndSetState(c, nextc)) { // oops, someone was faster than us, so try again continue; } return true; - } } return true;