JDK 9 RFR of JDK-8132548: java/lang/ThreadGroup/Stop.java fails with "RuntimeException: Failure"

joe darcy joe.darcy at oracle.com
Fri Jul 8 17:17:06 UTC 2016


The most surefire way to make sure the test doesn't fail anymore is to 
hg rm the test; if and unless the code is actually removed, that would 
not be the most appropriate approach though ;-)

While it might be overkill for this particular test, I think it would be 
preferable to start replacing our various sleep calls in tests with 
count down latches or other structures as appropriate. Converting this 
test could help provide a good example of the process.

(As alluded to earlier, the test suite as a whole could be made to run 
somewhat faster. Tests which wait for seconds when the entire test could 
commonly run in milliseconds in many cases are proportionately a good 
candidate to speed up. The absolute wait time are also problematic on 
the other extreme, running under -Xint on a heavily loaded test system, 
"should never take this long" numbers often aren't enough.)

Thanks,

-Joe


On 7/7/2016 11:46 PM, Amy Lu wrote:
> Yes, but I just thought that for a test that testing a deprecated 
> (since 1.2) API, and failed with very very low frequency (actually, 
> only one time during the years), we might not want to spend much 
> effort on a big change, like rewrite with CountDownLatch :-)
>
>
> Thanks,
> Amy
>
> On 7/8/16 2:36 PM, Martin Buchholz wrote:
>> CountDownLatch is a better way of waiting for events, like for the 
>> two threads to be started and for Thread.stop to have been called.
>>
>> The test should ensure that ThreadDeath is indeed thrown.  If the 
>> threads in the group notify the main thread via a latch when they 
>> catch ThreadDeath, then all the sleeps in this test can be removed.
>>
>> On Thu, Jul 7, 2016 at 11:01 PM, Amy Lu <amy.lu at oracle.com 
>> <mailto:amy.lu at oracle.com>> wrote:
>>
>>     Thank you Joe for your review.
>>
>>     The intent is to give it more chance "for the thread group stop
>>     to be issued", not to extend the whole test execution timeout.
>>
>>     I updated the webrev to make this in a retry, limit to 5 times of
>>     retry:
>>     http://cr.openjdk.java.net/~amlu/8132548/webrev.01/
>>     <http://cr.openjdk.java.net/%7Eamlu/8132548/webrev.01/>
>>
>>     Thanks,
>>     Amy
>>
>>
>>     On 7/8/16 12:15 PM, joe darcy wrote:
>>
>>         Hi Amy,
>>
>>         I'm a bit uncomfortable with the fix as-is.
>>
>>         Rather than hard-coding sleep values, if sleep values are
>>         needed I think it is a better practice to use ones that are
>>         scaled with the jtreg timeout factors, etc. used to run the
>>         tests. Please instead use something like the adjustTimeout
>>         method of
>>
>>         $JDK_FOREST_ROOT/test/lib/share/classes/jdk/test/lib/Utils
>>
>>         As a general comment, I'd prefer we don't just up timeout
>>         values for tests. That can cause the whole test suite run to
>>         slow down, which is undesirable especially if the condition
>>         in question may actually be satisfied in many cases much
>>         faster than the timeout value.
>>
>>         Thanks,
>>
>>         -Joe
>>
>>
>>         On 7/7/2016 7:01 PM, Amy Lu wrote:
>>
>>             Please review this trivial fix for
>>             test:java/lang/ThreadGroup/Stop.java
>>
>>             Though this is a test for a deprecated API, failed with
>>             very very low frequency and hard to reproduce (I got no
>>             luck to reproduce it), I’d like to patch it as suggested:
>>             extend the sleep in the main thread from one second to
>>             five seconds. Also added 'volatile' to the boolean
>>             variable 'groupStopped'.
>>
>>             bug: https://bugs.openjdk.java.net/browse/JDK-8132548
>>             webrev:
>>             http://cr.openjdk.java.net/~amlu/8132548/webrev.00/
>>             <http://cr.openjdk.java.net/%7Eamlu/8132548/webrev.00/>
>>
>>             Thanks,
>>             Amy
>>
>>
>>             --- old/test/java/lang/ThreadGroup/Stop.java 2016-07-04
>>             14:53:59.000000000 +0800
>>             +++ new/test/java/lang/ThreadGroup/Stop.java 2016-07-04
>>             14:53:58.000000000 +0800
>>             @@ -1,5 +1,5 @@
>>              /*
>>             - * Copyright (c) 1999, 2011, Oracle and/or its
>>             affiliates. All rights reserved.
>>             + * Copyright (c) 1999, 2016, Oracle and/or its
>>             affiliates. All rights reserved.
>>               * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE
>>             HEADER.
>>               *
>>               * This code is free software; you can redistribute it
>>             and/or modify it
>>             @@ -29,7 +29,7 @@
>>               */
>>
>>              public class Stop implements Runnable {
>>             -    private static boolean groupStopped = false ;
>>             +    private static volatile boolean groupStopped = false ;
>>                  private static final Object lock = new Object();
>>
>>                  private static final ThreadGroup group = new
>>             ThreadGroup("");
>>             @@ -70,7 +70,7 @@
>>                          while (!groupStopped) {
>>                              lock.wait();
>>                              // Give the other thread a chance to stop
>>             -                Thread.sleep(1000);
>>             +                Thread.sleep(5000);
>>                          }
>>                      }
>>
>>
>>
>>
>>
>>
>



More information about the core-libs-dev mailing list