Details
-
Bug
-
Resolution: Done
-
Critical
-
5.2.0.Beta3
-
None
Description
Using pessimistic locking, when a transaction is rolled-back, RollbackCommand and then TxCompletionNotification commands are sent to the primary owner. When the order of these two changes, the locks are unlocked twice: first by TxCompletionNotification calling LockManagerImpl.unlock(Collection<Object> lockedKeys, Object lockOwner) and then by AbstractTxLockingInterceptor.visitRollbackCommand calling LockManagerImpl.unlockAll(...)
When the lock is acquired after the first unlock, the second unlock fails with IllegalMonitorStateException in OwnableReentrantLock.tryAcquire(...), but the reference count is still decremented in AbstractPerEntryLockContainer.releaseLock(...). This results in further IllegalStateException: Negative reference count for lock