[ping] Re: RFR 8077327: ThreadStackTrace.java throws exception: BlockedThread expected to have BLOCKED but got RUNNABLE

Jaroslav Bachorik jaroslav.bachorik at oracle.com
Tue Apr 14 14:44:30 UTC 2015


On 14.4.2015 14:37, serguei.spitsyn at oracle.com wrote:
> On 4/14/15 12:38 AM, Daniel Fuchs wrote:
>> Hi Jaroslav,
>>
>> Shouldn't you also wait for the blockedThread to be blocked on
>> lockA at around line 252?
>> (I mean - using Utils.waitForThreadState(blockedThread, State.BLOCKED))
> I guess, it is about these lines:
>
>   255                     Utils.checkThreadState(blockedThread,
> Thread.State.BLOCKED);
>   256                     checkStack(blockedThread, blockedStack, bsDepth);
>
> The implementation of the Utils.checkThreadState() from Utils.java:
>
>      public static void checkThreadState(Thread t, Thread.State expected) {
> waitForThreadState(t, expected); <=== It does the call to the
> waitForThreadState
>
>          Thread.State state = tm.getThreadInfo(t.getId()).getThreadState();
>          if (state == null) {
>              throw new RuntimeException(t.getName() + " expected to have " +
>                  expected + " but got null.");
>          }
>          if (state != expected) {
>              t.dumpStack();
>              throw new RuntimeException(t.getName() +
>                   " expected to have " + expected + " but got " + state);
>          }
>      }

Yes, that's true. On the other hand the original code did call 
"blockedThread.waitUntilBlocked()" explicitly - so I decided to keep the 
semantics to minimize the chance of any regressions.

-JB-

>
> Thanks,
> Serguei
>
>
>>
>> best regards,
>>
>> -- daniel
>>
>> On 4/13/15 10:07 AM, Jaroslav Bachorik wrote:
>>> On 9.4.2015 20:11, Jaroslav Bachorik wrote:
>>>> Please, review the following test change
>>>>
>>>> Issue : https://bugs.openjdk.java.net/browse/JDK-8077327
>>>> Webrev: http://cr.openjdk.java.net/~jbachorik/8077327/webrev.00
>>>>
>>>> This fix is for an intermittent failure due to timing issues. The test
>>>> is using an arbitrary waiting period to allow the tested thread to
>>>> arrive to the requested state. Usually it works fine but under eg.
>>>> heavy
>>>> load this strategy will fail. The proposed solution is to explicitly
>>>> check for the test thread arriving to the requested state instead of
>>>> waiting eg. 10ms.
>>>>
>>>> I also took the liberty of removing the custom Semaphore implementation
>>>> and replacing its usage with java.util.concurrent.Phaser
>>>>
>>>> Thanks,
>>>>
>>>> -JB-
>>>
>>
>



More information about the serviceability-dev mailing list