In LockManager::hasConflictingRequests we read LockRequest::lock before getting the resource id and taking the bucket mutex. This can race with creating a new lock request when cleaning up unused locks.
Once potential solution may be to change the interface for LockManager::hasConflictingRequests to take in the resource id, so that the bucket mutex can be locked right away.