package org.jfrog.wharf.ivy.lock; import java.io.IOException; /** * Date: 9/15/11 * Time: 11:05 AM * * @author Fred Simon */ public class ReentrantLockHolder extends LockHolderDelegator { private int counter; public ReentrantLockHolder(InternalLockHolder delegate) { super(delegate); this.counter = 0; } @Override public synchronized void releaseLock() { if (--counter == 0) { delegate.releaseLock(); } } @Override public synchronized boolean acquireLock() { if (counter < 0) { // Dead lock holder delegate.appendLastMessage(" reentrant lock already closed!"); return false; } boolean acquired = true; if (++counter == 1) { acquired = delegate.acquireLock(); } if (acquired) { delegate.appendLastMessage(" reentrant lock holds = " + counter); } else { delegate.appendLastMessage(" reentrant lock was not acquired!"); counter--; } if (delegate.getLogger().isDebugEnabled()) { delegate.getLogger().log(delegate.stateMessage()); } return acquired; } @Override public synchronized void close() throws IOException { counter = -1; delegate.close(); } }