jmx-dev RFR 8067241 DeadlockTest.java failed with negative timeout value
shanliang
shanliang.jiang at oracle.com
Mon Dec 15 18:14:55 UTC 2014
Jaroslav Bachorik wrote:
> Hi,
>
> On 12/12/2014 09:56 AM, shanliang wrote:
>> Daniel Fuchs wrote:
>>> Hi Shanliang,
>>>
>>> These two statements are no longer needed and should be removed - as
>>> they
>>> are misleading:
>>>
>>> 64 if (!bb.gotLock) {
>>> 65 throw new RuntimeException("Failed to get lock,
>>> impossible!");
>>> 66 }
>>>
>>>
>>> 81 if (!wb.done) {
>>> 82 throw new RuntimeException("It is blocked!");
>>> 83 }
>>>
>> Yes, can be removed.
>>>
>>>
>>> which makes me wonder whether your changes are deeper than intended.
>>> Now the test will either succeed, or fail in jtreg timeout. The
>>> condition
>>> "It is blocked!"
>>> can no longer be detected by the test. Is that your intention? If
>>> that's
>>> your intention - I guess it is OK - but maybe it would deserve a
>>> comment
>>> in the @summary of the test. Something like 'This bug attempts to
>>> reproduce
>>> a deadlock situation and will block forever if the deadlock is
>>> present.'
>> Updated.
>>
>> Here is the new version:
>> http://cr.openjdk.java.net/~sjiang/JDK-8067241/01/
>
> I know that I'm starting to repeat myself but couldn't you replace
> L58-61 and L91-95 with a simple Phaser?
>
> Like
> ```
>
> L58-61: Phaser p = new Phaser(2); p.arriveAndAwaitAdvance()
>
> Then pass the Phaser instance to BadBoy and
>
> L91-95: p.arriveAndAwaitAdvance();
> ```
>
> This way the main thread is blocked till the BadBoy thread has
> acquired the BadBoy's lock and the code is more concise.
I agree Daniel's comment that we may need more investigation for using
Phaser, Phaser might be a good solution but the current synchronization
solution should work too and I have ran the test on jprt.
So let's keep the current solution and investivating on Phaser if the
test fails again.
Shanliang
>
> -JB-
>
>
>>
>> Thanks,
>> Shanliang
>>
>>>
>>> best regards,
>>>
>>> -- daniel
>>>
>>> On 12/12/14 8:33 AM, shanliang wrote:
>>>> Hi,
>>>>
>>>> It is a test bug, it is not correct:
>>>> while(!wb.done || timeToWait > 0) {
>>>>
>>>> it should be:
>>>> while(!wb.done && timeToWait > 0) {
>>>>
>>>> || should be changed to &&
>>>>
>>>> Another issue is that the waiting time could be not enough (final
>>>> long timeout = 2000).
>>>>
>>>> The fix is to remove the waiting time specified in the test, the
>>>> timeout of test harness will be used as the max waiting time.
>>>>
>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8067241
>>>> webrev: http://cr.openjdk.java.net/~sjiang/JDK-8067241/00/
>>>>
>>>> thanks,
>>>> Shanliang
>>>
>>
>
More information about the jmx-dev
mailing list