[
https://issues.jboss.org/browse/JBTM-2098?page=com.atlassian.jira.plugin....
]
Tom Jenkinson commented on JBTM-2098:
-------------------------------------
Thread-3 - has locked a LockManager mutex in setLock, then calls add() on its AtomicAction
- a synchronized operation
Concurrently in Thread-2, the parent transaction is committing the subordinate which has
the LockManager in it. The AtomicAction is locked as enters abort, it then calls
nestedAbort on the LockRecord which needs to obtain the mutex that Thread-3 still owns.
Deadlock in ThreadActionTest
----------------------------
Key: JBTM-2098
URL:
https://issues.jboss.org/browse/JBTM-2098
Project: JBoss Transaction Manager
Issue Type: Feature Request
Security Level: Public(Everyone can see)
Components: Testing, Transaction Core
Reporter: Tom Jenkinson
Assignee: Tom Jenkinson
Fix For: 5.0.1.Final
{code}
Found one Java-level deadlock:
=============================
"Thread-3":
waiting to lock monitor 0x0000000019599b88 (object 0x000000009e484cb0, a
com.arjuna.ats.arjuna.AtomicAction),
which is held by "Thread-2"
"Thread-2":
waiting for ownable synchronizer 0x000000009debea20, (a
java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "Thread-3"
Java stack information for the threads listed above:
===================================================
"Thread-3":
at com.arjuna.ats.arjuna.coordinator.BasicAction.add(BasicAction.java:297)
- waiting to lock <0x000000009e484cb0> (a com.arjuna.ats.arjuna.AtomicAction)
at com.arjuna.ats.arjuna.StateManager.modified(StateManager.java:896)
- locked <0x000000009debe740> (a
com.hp.mwtests.ts.txoj.common.resources.AtomicObject)
at com.arjuna.ats.txoj.LockManager.setlock(LockManager.java:487)
- locked <0x000000009e05fba8> (a java.lang.Object)
at com.arjuna.ats.txoj.LockManager.setlock(LockManager.java:329)
at com.hp.mwtests.ts.txoj.common.resources.AtomicObject.incr(AtomicObject.java:139)
at
com.hp.mwtests.ts.txoj.common.resources.BasicThreadedObject.run(BasicThreadedObject.java:79)
"Thread-2":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000009debea20> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
at com.arjuna.ats.arjuna.StateManager.lockMutex(StateManager.java:1317)
at com.arjuna.ats.txoj.LockManager.doRelease(LockManager.java:756)
at com.arjuna.ats.txoj.LockManager.releaseAll(LockManager.java:288)
at
com.arjuna.ats.internal.txoj.abstractrecords.LockRecord.nestedAbort(LockRecord.java:106)
at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2941)
at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2918)
at com.arjuna.ats.arjuna.coordinator.BasicAction.Abort(BasicAction.java:1632)
- locked <0x000000009e484cb0> (a com.arjuna.ats.arjuna.AtomicAction)
at com.arjuna.ats.arjuna.coordinator.BasicAction.checkChildren(BasicAction.java:3354)
at com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1460)
- locked <0x000000009e4039c8> (a com.arjuna.ats.arjuna.AtomicAction)
at
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:96)
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:147)
at
com.hp.mwtests.ts.txoj.common.resources.BasicThreadedObject.run(BasicThreadedObject.java:90)
Found 1 deadlock.
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira