Details
-
Bug
-
Status: Resolved
-
Blocker
-
Resolution: Fixed
-
None
Description
LockManager has a possible deadlock.
- Number of locks is limited by using a GenericObjectPool. If N locks are already acquired, new requestors need to wait. This wait in getLockForLocking happens in a callback executed from ConcurrentHashMap#compute while holding a lock on a map entry.
- While releasing a lock, decrementActiveLockCount implicitly requires a lock on an entry in ConcurrentHashMap.