RFR (M): 8231595 [TEST] develop a test case for SuspendThreadList including current thread
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Tue Oct 8 18:50:15 UTC 2019
Ping...
Thanks,
Serguei
On 10/7/19 5:25 PM, serguei.spitsyn at oracle.com wrote:
> On 10/7/19 17:14, serguei.spitsyn at oracle.com wrote:
>> Hi Alex, Chris and David,
>>
>> The mach5 testing in 100 runs loop on all platform discovered a race
>> in new test.
>> It is between the native suspendTestedThreads() called on the
>> suspender thread
>> and the checkSuspendedStatus() calling native
>> checkTestedThreadsSuspended().
>>
>> It occurred that the iteration count and sleep time in
>> checkSuspendedStatus() can be not enough:
>> 100 private boolean checkSuspendedStatus(ThreadToSuspend[] threads) throws RuntimeException {
>> 101 boolean success = false;
>> 102
>> 103 log("Main: checking all tested threads have been suspended");
>> 104
>> 105 // wait for tested threads to reach suspended status
>> 106 for (int i = 0; !success && i < 20; i++) {
>> 107 try {
>> 108 Thread.sleep(10);
>> 109 } catch (InterruptedException e) {
>> 110 throw new RuntimeException("Main: sleep was interrupted\n\t" + e);
>> 111 }
>> 112 success = checkTestedThreadsSuspended();
>> 113 }
>> 114 return success;
>> 115 }
>>
>> So, I've decided to refactor/update the test a little bit:
>>
>> 1. Now the checkSuspendedStatus() is:
>> 100 private boolean checkSuspendedStatus() throws RuntimeException {
>> 101 log("Main: checking all tested threads have been suspended");
>> 102 return checkTestedThreadsSuspended();
>> 103 }
>> 2. A raw monitor agent_monitor is added to the native agent.
>> It is created and locked in the Java_ThreadToSuspend_init()
>> function called at
>> the beginning of the ThreadToSuspend.run() execution of the
>> suspender thread
>> and unlocked at the end of
>> Java_ThreadToSuspend_suspendTestedThreads().
>>
>> The Java_SuspendWithCurrentThread_checkTestedThreadsSuspended()
>> grabs the agent_monitor
>> on the Main thread to wait until the suspendTestedThreads()
>> completes its work.
>>
>> 3. Also, the results[] array is always created and used locally in
>> the functions
>> where it is needed: suspendTestedThreads() and resumeTestedThreads().
>
> Forgot to tell about one more change:
>
> 4. The releaseTestedThreads() is renamed to releaseTestedThreadsInfo()
> and moved
> to the end of the Main thread run() method.
>
> Also wanted to thank Alex for sharing good suggestions on the sync
> approaches.
>
> Thanks,
> Serguei
>
>>
>> Updated webrev version:
>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2019/8231595-jvmti-susp-tlist.4/
>>
>>
>> Testing:
>> One mach5 run with 100 rep counter successfully passed.
>> To be more confident, I've submitted one more mach5 job which is in
>> progress.
>>
>> Thanks,
>> Serguei
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20191008/7135c7a1/attachment.html>
More information about the serviceability-dev
mailing list