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); } }