private void freeKeyLock(final Object key, final CountingLock lock) { assert key != null : "contract broken: key != null"; assert lock != null : "contract broken: lock != null"; getStripedLock(key).tryLock(); try { lock.decrementUses(); if (!lock.isUsed()) { key2lock.remove(key); } } finally { getStripedLock(key).unlock(); } }
private CountingLock getKeyLock(final Object key) { assert key != null : "contract broken: key != null"; getStripedLock(key).tryLock(); try { final CountingLock result; final CountingLock previousLock = key2lock.get(key); if (previousLock == null) { result = new CountingLock(lockTimeout, lockTimeoutUnit); key2lock.put(key, result); } else { result = previousLock; } result.incrementUses(); return result; } finally { getStripedLock(key).unlock(); } }
private void freeKeyLock(final Object key, final CountingLock lock) { assert key != null : "contract broken: key != null"; assert lock != null : "contract broken: lock != null"; getStripedLock(key).tryLock(); try { lock.decrementUses(); if (!lock.isUsed()) { key2lock.remove(key); } } finally { getStripedLock(key).unlock(); } }
private CountingLock getKeyLock(final Object key) { assert key != null : "contract broken: key != null"; getStripedLock(key).tryLock(); try { final CountingLock result; final CountingLock previousLock = key2lock.get(key); if (previousLock == null) { result = new CountingLock(lockTimeout, lockTimeoutUnit); key2lock.put(key, result); } else { result = previousLock; } result.incrementUses(); return result; } finally { getStripedLock(key).unlock(); } }
private <R> R executeLockedInternal(final Object key, final ReturnValueLockCallback<R> callback) { assert key != null : "contract broken: key != null"; assert callback != null : "contract broken: callback != null"; final CountingLock lock = getKeyLock(key); try { lock.tryLock(); try { return callback.doInLock(); } finally { lock.unlock(); } } finally { freeKeyLock(key, lock); } }
private <R> R executeLockedInternal(final Object key, final ReturnValueLockCallback<R> callback) { assert key != null : "contract broken: key != null"; assert callback != null : "contract broken: callback != null"; final CountingLock lock = getKeyLock(key); try { lock.tryLock(); try { return callback.doInLock(); } finally { lock.unlock(); } } finally { freeKeyLock(key, lock); } }