RFR 8078143: java/lang/management/ThreadMXBean/AllThreadIds.java fails intermittently

Jaroslav Bachorik jaroslav.bachorik at oracle.com
Thu Apr 30 18:27:23 UTC 2015


On 30.4.2015 19:18, Martin Buchholz wrote:
> Tests that sleep can almost always be better written some other way.
> In this case, I would prefer busy-waiting with timeout until the
> expected condition becomes true.

The thing is that in case of a real issue with the thread counters we
a/ would be busy-waiting till the test times out (using an arbitrary 
delay is also problematic due to different performance of different 
machines running with different configurations)
b/ would get a rather confusing message about the test timing out at the end

-JB-

>
> Here's some code from jsr166 tck tests:
>
>      /**
>       * Spin-waits until sync.isQueued(t) becomes true.
>       */
>      void waitForQueuedThread(AbstractQueuedSynchronizer sync, Thread t) {
>          long startTime = System.nanoTime();
>          while (!sync.isQueued(t)) {
>              if (millisElapsedSince(startTime) > LONG_DELAY_MS)
>                  throw new AssertionFailedError("timed out");
>              Thread.yield();
>          }
>          assertTrue(t.isAlive());
>      }
>
>
> On Thu, Apr 30, 2015 at 7:25 AM, Jaroslav Bachorik
> <jaroslav.bachorik at oracle.com <mailto:jaroslav.bachorik at oracle.com>> wrote:
>
>     Please, review the following test change
>
>     Issue : https://bugs.openjdk.java.net/browse/JDK-8078143
>     Webrev: http://cr.openjdk.java.net/~jbachorik/8078143/webrev.00
>
>     The test fails intermittently due to inconsistent reporting of the
>     live threads number.It is related to
>     https://bugs.openjdk.java.net/browse/JDK-8021335 (or, better said,
>     caused by) - certain performance counters used for the thread
>     accounting are being updated under a mutex but are read without it -
>     and it can lead to stale data being reported. More details are
>     available in the linked issue and discussion.
>
>     Because of this it is not enough to join() a terminating thread to
>     make sure the numbers would be correct. Luckily enough, it seems to
>     be sufficient to wait for a short time before actually accessing the
>     counters to be able to get a consistent view. In this fix I opted
>     for a ridiculously huge interval of 500ms just to be sure.
>
>     Thanks,
>
>     -JB-
>
>



More information about the serviceability-dev mailing list