On 28/11/2012 2:10 AM, Dmytro Sheyko wrote:
Hi,
One more patch regarding deadlock detection.
https://bugs.openjdk.java.net/show_bug.cgi?id=100059
Deadlock detection mechanism assumes that thread cannot block itself. In
general this is not right, especially in case of non-reentrant mutexes.
Arguably that is not a deadlock per se. I'm unclear in your patch as to
what conditions actually constitute a self-deadlock and how it is
detected. For example:
Locksupport.park(); // if no one knows to unpark me I never return
Object o = new Object();
synchronized(o) { o.wait(); } // can't get notified
CountdownLatch l = new CountdownLatch();
l.await(); // no one can count down
Should these be reported? I don't see how they could without much more
elaborate analysis of the objects involved. So what constituates a
detectable self-deadlock?
Thanks,
David
One of such examples we can find here (FIFOMutex sample):
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/LockSupport.html
To fix this, we just need to drop unnecessary code.
Attached updated patch and testcase
Thanks,
Dmytro