RFR: 8208278: [mlvm] Deadlocked threads are not always detected

David Holmes david.holmes at oracle.com
Sat Feb 23 05:29:50 UTC 2019


Hi Igor,

jmpp updated and java file regenerated:

http://cr.openjdk.java.net/~dholmes/8208278/webrev.v2/

and _locks[i].isLocked() loop behaviour restored.

Thanks,
David

On 23/02/2019 9:16 am, David Holmes wrote:
> Hi Igor,
> 
> On 23/02/2019 5:04 am, Igor Ignatyev wrote:
>> Hi David,
>>
>> Overall looks reasonable. I have a couple of comments:
>>   - this INDIFY_Test.java was generated from INDIFY_Test.jmpp, so it'd 
>> be better to make changes in .jmpp file and regenerate .java
> 
> Oh! Did not realize that. How do you regenerate the .java file ??
> 
>>   - near L#18218, you changed for-loop to throw an exception as soon 
>> as we get 1st locked thread, this reduces amount of diagnostic 
>> information we would get in such failure scenarios, so I prefer 
>> checking _testFailed (or other bool) after the loop.
> 
> Note this loop is just a sanity check that the locks (not the threads) 
> are not locked before we start - which should always be the case if we 
> correctly join()'d all threads on previous iteration. There's very 
> little diagnostic information here (it doesn't even try to tell you 
> which thread owns the lock!) But I can move it back to after the loop.
> 
> Thanks,
> David
> 
>>> + // Sanity check that all the locks are available.
>>> + for (int i = 0; i < THREAD_NUM; i++ ) {
>>> + if (_locks[i].isLocked()) {
>>>                   Env.getLog().complain("Lock " + i + " is still 
>>> locked!");
>>> - _testFailed = true;
>>> + throw new Exception("Some locks are still locked");
>>>               }
>>>           }
>>> - if ( _testFailed )
>>> - throw new Exception("Some locks are still locked");
>>
>> Thanks,
>> -- Igor
>>
>>> On Feb 22, 2019, at 5:13 AM, David Holmes <david.holmes at oracle.com 
>>> <mailto:david.holmes at oracle.com>> wrote:
>>>
>>> webrev: http://cr.openjdk.java.net/~dholmes/8208278/webrev/
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8208278
>>>
>>> The test was failing to find the expected deadlocks on OS X but it 
>>> turns out that the test was simply racy and the race always lost on 
>>> OS X. With logging enabled the test started failing on different 
>>> platforms and in different ways.
>>>
>>> The main logic of the test is restructured so that we don't assume 
>>> things will happen within a certain time but instead we loop (or 
>>> block) until they do and rely on the overall test timeout to detect 
>>> there may be a problem.
>>>
>>> Thanks,
>>> David
>>>
>>>
>>


More information about the hotspot-dev mailing list