RFR 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE

shanliang shanliang.jiang at oracle.com
Thu Jan 29 15:59:54 UTC 2015


Jaroslav Bachorik wrote:
> On 29.1.2015 14:43, shanliang wrote:
>> Jaroslav Bachorik wrote:
>>> Please, review the following test change.
>>>
>>> Issue : https://bugs.openjdk.java.net/browse/JDK-8071641
>>> Webrev: http://cr.openjdk.java.net/~jbachorik/8071641/webrev.00/
>>>
>>> The test fails very intermittently with NPE. This seems to be caused
>>> by a data race between Thread.getStatus() and
>>> ThreadMXBean.getThreadInfo() - thread state is reported as BLOCKED but
>>> the ThreadInfo still contains a stale information (lockname == null).
>>>
>>> The solution would be re-retrieving the ThreadInfo until it reflects
>>> the actual thread state.
>>>
>>> -JB-
>>   77     private static void waitForThreadState(Thread t, Thread.State
>> state) throws InterruptedException {
>>   78         while (!t.isInterrupted() && t.getState() != state) {
>>   79             Thread.sleep(3);
>>   80         }
>>   81     }
>> Better to throw an exception if t.isInterrupted()?
>> Not sure when will happen t.isInterrupted(), but the method
>> waitForThreadState tests it, so it is supposed to be possible to get it,
>> when it is true then the testing method might return with a thread state
>> different to the waited one.
>
> Yes, it might get to an undefined state. But given that the thread 
> would get interrupted only when the harness is timing out the test 
> this discrepancy would not actually matter - the test would fail with 
> timeout anyway.
In this case it is useless to test t.isInterrupted() in waitForThreadState.

Shanliang
>
> -JB-
>
>>
>> Shanliang
>>
>>
>



More information about the serviceability-dev mailing list