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.bacho...@oracle.com <mailto:jaroslav.bacho...@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-



Reply via email to