Following test fails intermittently on solaris-sparc machine.
java/lang/management/ThreadMXBean/FindDeadlocks.java
Problem: The dead lock finding thread did not wait long enough
for the threads to reach dead lock. So the test case should
be fixed to wait longer than 100ms or it should re-try
it in a loop for 10 or 20 times before it reports failure.
I think the re-entrant locks some times re-trys to acquire
lock and during the re-try the thread may not show up
as blocked. So it is better to re-try to see if the
threads have reached deadlock.
If you see the thread dump below of Deadlock-Threads you
will see that the Deadlock-Thread-2 and Deadlock-Thread-1
are still running in the reentrant lock code.
Full Java thread dump
"Deadlock-Thread-3" Id=14 in WAITING on lock=java.util.concurrent.locks.ReentrantLock$NonfairSync bf2d5e
owned by Deadlock-Thread-1 Id=12
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:744)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:777)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1107)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:185)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:261)
at SynchronizerDeadlock$DeadlockingThread.g(SynchronizerDeadlock.java:95)
at SynchronizerDeadlock$DeadlockingThread.f(SynchronizerDeadlock.java:88)
at SynchronizerDeadlock$DeadlockingThread.run(SynchronizerDeadlock.java:81)
Locked synchronizers: count = 1
java.util.concurrent.locks.ReentrantLock$NonfairSync 1971afc
"Deadlock-Thread-2" Id=13 in RUNNABLE
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:744)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:777)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1107)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:185)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:261)
at SynchronizerDeadlock$DeadlockingThread.g(SynchronizerDeadlock.java:95)
at SynchronizerDeadlock$DeadlockingThread.run(SynchronizerDeadlock.java:81)
Locked synchronizers: count = 1
java.util.concurrent.locks.ReentrantLock$NonfairSync 13bad12
"Deadlock-Thread-1" Id=12 in RUNNABLE
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:744)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:777)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1107)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:185)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:261)
at SynchronizerDeadlock$DeadlockingThread.g(SynchronizerDeadlock.java:95)
at SynchronizerDeadlock$DeadlockingThread.f(SynchronizerDeadlock.java:88)
at SynchronizerDeadlock$DeadlockingThread.run(SynchronizerDeadlock.java:81)
Locked synchronizers: count = 1
java.util.concurrent.locks.ReentrantLock$NonfairSync bf2d5e
|