RFR(XS): 8234882: JVM TI StopThread should only allow ThreadDeath
David Holmes
david.holmes at oracle.com
Wed May 27 09:00:39 UTC 2020
On 27/05/2020 6:36 pm, serguei.spitsyn at oracle.com wrote:
> Hi David,
>
>
> On 5/27/20 00:47, David Holmes wrote:
>> Hi Serguei,
>>
>> On 27/05/2020 1:01 pm, serguei.spitsyn at oracle.com wrote:
>>> Please, review a fix for:
>>> https://bugs.openjdk.java.net/browse/JDK-8234882
>>>
>>> CSR draft (one CSR reviewer is needed before finalizing it):
>>> https://bugs.openjdk.java.net/browse/JDK-8245853
>>
>> I have some thoughts on the wording which I will add to the CSR.
>
> Thank you a lot for looking at this!
>
>> Also on reflection I think JVMTI_ERROR_ILLEGAL_ARGUMENT would the best
>> error to use, and it has an equivalent in JDWP and at the Java level
>> for JDI.
>
> This is an interesting variant, thanks!
> We need to balance on several criteria:
> 1) Compatibility: keep returning error as close as possible to the
> current spec
If you are adding a new error condition I don't understand what you mean
by "close to the current spec" ??
> 2) Best error naming match between JVM TI and JDI/JDWP
> 3) Best practice in errors naming
If the argument is not a ThreadDeath instance then it is an illegal
argument - perfect fit semantically all the specs involved have an
"illegal argument" error form.
Cheers,
David
> I think the #1 is most important but will look at it once more.
>
> Thanks,
> Serguei
>
>> Thanks,
>> David
>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.1/src/
>>>
>>>
>>> Updated JVM TI StopThread spec:
>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.1/docs/specs/jvmti.html#StopThread
>>>
>>>
>>> Summary:
>>>
>>> The JVM TI StopThread method mirrored the functionality of the
>>> java.lang.Thread::stop(Throwable t) method, in that it allows any
>>> exception
>>> type to be installed as an asynchronous exception in the target
>>> thread.
>>> However, the java.lang.Thread::stop(Throwable t) method was
>>> inherently unsafe
>>> and in Java 8 (under JDK-7059085) it was "retired" so that it
>>> always threw
>>> UnsupportedOperationException.
>>> The updated JVM TI StopThread spec disallows an arbitrary
>>> Throwable from being passed,
>>> and instead restricts the argument to being an instance of
>>> ThreadDeath, thus
>>> mirroring the (deprecated but still functional)
>>> java.lang.Thread::stop() method.
>>> The error JVMTI_ERROR_INVALID_OBJECT is returned if the exception
>>> argument
>>> is not an instance of ThreadDeath.
>>>
>>> Also, I will file similar RFE and CSR on the JDI and JDWP spec.
>>>
>>>
>>> Testing:
>>> Built docs and checked the doc has been generated as expected.
>>> Will run the nsk.jvmti tests locally.
>>> Will submit hs-tiers1-3 to make sure there are no regressions in
>>> the JVM TI and JDI tests.
>>>
>>> Thanks,
>>> Serguei
>
More information about the serviceability-dev
mailing list