RFR(XS): 8234882: JVM TI StopThread should only allow ThreadDeath
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Thu May 28 05:12:17 UTC 2020
Hi David,
I've updated the CSR and webrev in place.
The changes are:
- addressed David's suggestion to rephrase StopThread description change
- replaced JVMTI_ERROR_INVALID_OBJECT with JVMTI_ERROR_ILLEGAL_ARGUMENT
- updated the implementation in jvmtiEnv.cpp to return
JVMTI_ERROR_ILLEGAL_ARGUMENT
- updated one of the nsk.jvmti StopThread tests to check error case
with the JVMTI_ERROR_ILLEGAL_ARGUMENT
I'm reposting the links for convenience.
Enhancement:
https://bugs.openjdk.java.net/browse/JDK-8234882
CSR draft:
https://bugs.openjdk.java.net/browse/JDK-8245853
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
The old webrev and spec are here:
http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.0/
Thanks,
Serguei
On 5/27/20 18:03, serguei.spitsyn at oracle.com wrote:
> Hi David,
>
>
> On 5/27/20 02:00, David Holmes wrote:
>> 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" ??
>
> If the JVMTI_ERROR_INVALID_OBJECT is returned than the JDWP agent does
> not need any new error handling.
> The same can be true in the JDI if the JDWP returns the same error as
> it returned before.
> In this case we do not add new error code but extend the existing to
> cover new error condition.
>
> But, in fact (especially, after rethinking), I do not like the
> JVMTI_ERROR_INVALID_OBJECT
> error code as it normally means something different.
> So, let's avoid using it and skip this criteria.
> Then we need new error code to cover new error condition.
>
>>> 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.
>
> I agree with this.
> It is why I like this suggestion. :)
> The JDWP equivalent is: ILLEGAL_ARGUMENT.
> The JDI equivalent is: IllegalArgumentException
>
> I'll prepare and send the update.
>
> Thanks!
> Serguei
>
>
>> 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