RFR: 8306034: add support of virtual threads to JVMTI StopThread [v3]
Chris Plummer
cjplummer at openjdk.org
Fri Apr 21 16:42:49 UTC 2023
On Fri, 21 Apr 2023 08:09:55 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:
>> This enhancement adds support of virtual threads to the JVMTI `StopThread` function.
>> In preview releases before this enhancement the StopThread returned the JVMTI_ERROR_UNSUPPORTED_OPERATION error code for virtual threads.
>>
>> The `StopThread` supports sending an asynchronous exception to a virtual thread only if it is current or suspended at mounted state. For instance, a virtual thread can be suspended at a JVMTI event. If the virtual thread is not suspended and is not current then the `JVMTI_ERROR_THREAD_NOT_SUSPENDED` error code is returned. If the virtual thread was suspended at unmounted state then the `JVMTI_ERROR_OPAQUE_FRAME` error code is returned.
>>
>> The `StopThread` has the following description for `JVMTI_ERROR_OPAQUE_FRAME` error code:
>>> The thread is a suspended virtual thread and the implementation
>>> was unable to throw an asynchronous exception from this frame.
>>
>> A couple of the `serviceability/jvmti/vthread` tests has been updated to adopt to new `StopThread` behavior.
>>
>> The CSR is: https://bugs.openjdk.org/browse/JDK-8306434
>>
>> Testing:
>> The mach5 tears 1-6 are in progress.
>> Preliminary test runs were good in general.
>> The JDB test `vmTestbase/nsk/jdb/kill/kill001/kill001.java` has been problem-listed and will be fixed by the corresponding debugger enhancement which is going to adopt JDWP/JDI specs to new behavior of the JVMTI `StopThread` related to virtual threads.
>>
>> Also, two JCK JVMTI tests are failing in the tier-6 :
>>> vm/jvmti/StopThread/stop001/stop00103/stop00103.html
>>> vm/jvmti/StopThread/stop001/stop00103/stop00103a.html
>>
>> These two tests will be excluded from the test runs by the JCK team and then adjusted to new `StopThread` behavior.
>
> Serguei Spitsyn has updated the pull request incrementally with one additional commit since the last revision:
>
> corrections for BoundVirtualThread and test typos
test/hotspot/jtreg/serviceability/jvmti/vthread/StopThreadTest/StopThreadTest.java line 89:
> 87: log("\nMain #A: method A() must be blocked on entering a synchronized statement");
> 88: synchronized (TestTask.lock) {
> 89: testTaskThread = Thread.ofVirtual().name("TestTaskThread").start(testTask);
Do we have other tests that are doing the equivalent testing on platform threads?
test/hotspot/jtreg/serviceability/jvmti/vthread/StopThreadTest/StopThreadTest.java line 135:
> 133: // StopThread is expected to succeed.
> 134: testTask.ensureFinished();
> 135: }
I don't see how this is doing any testing. Where is the stopThread(null) call?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13546#discussion_r1173970088
PR Review Comment: https://git.openjdk.org/jdk/pull/13546#discussion_r1173968926
More information about the serviceability-dev
mailing list