[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: RFR(XS): 8234882: JVM TI StopThread should only allow ThreadDeath
From:       "serguei.spitsyn () oracle ! com" <serguei ! spitsyn () oracle ! com>
Date:       2020-05-31 7:50:06
Message-ID: 6ebc70ce-787d-7f13-66f4-14ad8c8102d6 () oracle ! com
[Download RAW message or body]

Hi David,

Also jumping to end.

On 5/30/20 06:50, David Holmes wrote:
> Hi Serguei,
> 
> Jumping to the end for now ...
> 
> On 30/05/2020 5:50 am, serguei.spitsyn@oracle.com wrote:
> > Hi David and reviewers,
> > 
> > The updated webrev version is:
> > http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.2/src/ 
> > 
> > 
> > This update adds testing that StopThread can return 
> > JVMTI_ERROR_INVALID_OBJECT error code.
> > 
> > The JVM TI StopThread spec is:
> > http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.2/docs/specs/jvmti.html#StopThread \
> >  
> > 
> > 
> > There is a couple of comments below.
> > 
> > 
> > On 5/29/20 06:18, David Holmes wrote:
> > > On 29/05/2020 6:24 pm, serguei.spitsyn@oracle.com wrote:
> > > > On 5/29/20 00:56, serguei.spitsyn@oracle.com wrote:
> > > > > On 5/29/20 00:42, serguei.spitsyn@oracle.com wrote:
> > > > > > Hi David,
> > > > > > 
> > > > > > Thank you for reviewing this!
> > > > > > 
> > > > > > On 5/28/20 23:57, David Holmes wrote:
> > > > > > > Hi Serguei,
> > > > > > > 
> > > > > > > On 28/05/2020 3:12 pm, serguei.spitsyn@oracle.com wrote:
> > > > > > > > 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
> > > > > > > 
> > > > > > > Spec updates are good - thanks.
> > > > > > 
> > > > > > Thank you for the CSR review.
> > > > > > 
> > > > > > > > Webrev:
> > > > > > > > http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.1/src/ \
> > > > > > > >  
> > > > > > > 
> > > > > > > src/hotspot/share/prims/jvmtiEnv.cpp
> > > > > > > 
> > > > > > > The ThreadDeath check is fine but I'm a bit confused about the 
> > > > > > > additional null check that leads to JVMTI_ERROR_INVALID_OBJECT. 
> > > > > > > I can't see how resolve_external_guard can return NULL when not 
> > > > > > > passed in NULL. Nor why that would result in 
> > > > > > > JVMTI_ERROR_INVALID_OBJECT rather than JVMTI_ERROR_NULL_POINTER. 
> > > > > > > And I note JVMTI_ERROR_NULL_POINTER is not even a listed error 
> > > > > > > for StopThread! This part of the change seems unrelated to this 
> > > > > > > issue.
> > > > > > 
> > > > > > I was also surprised with the JVMTI_ERROR_NULL_POINTER and 
> > > > > > JVMTI_ERROR_INVALID_OBJECT error codes.
> > > > > > The JVM TI spec automatic generation adds these two error codes 
> > > > > > for a jobject parameter.
> > > > > > 
> > > > > > Also, they both are from the Universal Errors section:
> > > > > > http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.1/docs/specs/jvmti.html#universal-error \
> > > > > >  
> > > > > > 
> > > > > > You can find a link to this section at the start of the Error 
> > > > > > section:
> > > > > > http://cr.openjdk.java.net/~sspitsyn/webrevs/2020/jvmti-stop-thread.1/docs/specs/jvmti.html#StopThread \
> > > > > >  
> > > > > > 
> > > > > > My understanding (not sure, it is right) is that NULL has to be 
> > > > > > reported with JVMTI_ERROR_NULL_POINTER and a bad
> > > > > > jobject (for instance, a WeakReference with a GC-ed target) has 
> > > > > > to be reported with JVMTI_ERROR_INVALID_OBJECT.
> > > > > > At least, I was not able to construct a test case to get this 
> > > > > > error code returned.
> > > > > > So, I'm puzzled with this. I'll try to find some examples with 
> > > > > > JVMTI_ERROR_NULL_POINTER errors.
> > > > > 
> > > > > Found the explanation.
> > > > > The JDI file:
> > > > > src/jdk.jdi/share/classes/com/sun/tools/jdi/JDWPException.java
> > > > > 
> > > > > has a fragment that translate the INVALID_OBJECT error to the 
> > > > > ObjectCollectedException:
> > > > > RuntimeException toJDIException() {
> > > > > switch (errorCode) {
> > > > > case JDWP.Error.INVALID_OBJECT:
> > > > > return new ObjectCollectedException();
> > > > > 
> > > > > So, the INVALID_OBJECT is for a jobject handle that is referencing 
> > > > > a collected object.
> > > > > It means that previous implementation incorrectly returned 
> > > > > JVMTI_ERROR_NULL_POINTER error code.
> > > > 
> > > > I should create and delete local or global ref to construct a test 
> > > > case for this.
> > > > 
> > > > Interesting that the JDWPException::toJDIException() does not 
> > > > convert the ILLEGAL_ARGUMENT error code to an 
> > > > IllegalArgumentException.
> > > > I've just added this conversion.
> > > 
> > > Given the definition of JDWP INVALID_OBJECT then obviously JDI 
> > > converts it to ObjectCollectedException.
> > > 
> > > So reading further in JNI spec:
> > > 
> > > "Weak global references are a special kind of global reference. 
> > > Unlike normal global references, a weak global reference allows the 
> > > underlying Java object to be garbage collected. Weak global 
> > > references may be used in any situation where global or local 
> > > references are used."
> > > 
> > > So it seems that any function that takes a jobject cxould in fact 
> > > accept a jweak, in which case JVMTI_ERROR_INVALID_OBJECT is a 
> > > possibility in all cases. So IIUC JNIHandles::resolve_external_guard 
> > > can return NULL if a weak reference has been collected. So the new 
> > > code you propose seems correct.
> > 
> > You are right about weak global references.
> > I was able to construct a test case for JVMTI_ERROR_INVALID_OBJECT.
> > The JNI NewGlobalRef and DeleteGlobalRef are used for it.
> > You can find it in the updated webrev version.
> > 
> > > However, this still is unrelated to the current issue and I do not 
> > > see other JVM TI doing checks for this case. So this seems to be a 
> > > much broader issue.
> > There are many such checks in JVM TI.
> > For instance, there are checks like the following in jvmtiEnv.cpp:
> > NULL_CHECK(o, JVMTI_ERROR_INVALID_OBJECT)
> 
> Yes but they are incorrect IMO e.g.
> 
> JvmtiEnv::GetObjectSize(jobject object, jlong* size_ptr) {
> oop mirror = JNIHandles::resolve_external_guard(object);
> NULL_CHECK(mirror, JVMTI_ERROR_INVALID_OBJECT);
> 
> The NULL_CHECK will fail if either object is NULL or object is a jweak 
> that has been cleared. In the first case it should report 
> JVMTI_ERROR_NULL_POINTER.
> 
> The correct pattern is what you proposed with this fix:
> 
> +   NULL_CHECK(exception, JVMTI_ERROR_NULL_POINTER);
> oop e = JNIHandles::resolve_external_guard(exception);
> +   // the exception must be a valid jobject
> +   if (e == NULL) {
> +     return JVMTI_ERROR_INVALID_OBJECT;
> +   }
> 

I see your point, thanks!
I'll check these cases and file a bug if necessary.

> Though not sure why you didn't use a second NULL_CHECK

I've already replaced it with:
   NULL_CHECK(e, JVMTI_ERROR_INVALID_OBJECT);

You, probably, need to refresh the webrev page.

Thanks,
Serguei


> David
> -----
> 
> > Thanks,
> > Serguei
> > 
> > > 
> > > David
> > > -----
> > > 
> > > > Thanks,
> > > > Serguei
> > > > 
> > > > 
> > > > 
> > > > > Thanks,
> > > > > Serguei
> > > > > 
> > > > > > > test/hotspot/jtreg/vmTestbase/nsk/jvmti/StopThread/stopthrd006/TestDescription.java \
> > > > > > >  
> > > > > > > 
> > > > > > > The copyright year should be change to "2018, 2020,".
> > > > > > Thank you for the catch.
> > > > > > I planned to update the copyright comments.
> > > > > > 
> > > > > > > I'm a little surprised the test doesn't actually check that a 
> > > > > > > valid call doesn't produce an error. But that's an existing 
> > > > > > > quirk of the test and not something you need to address here (if 
> > > > > > > indeed it needs addressing - perhaps there is another test for 
> > > > > > > that).
> > > > > > 
> > > > > > There are plenty of other nsk.jvmti tests which check valid calls.
> > > > > > 
> > > > > > Thanks,
> > > > > > Serguei
> > > > > > > 
> > > > > > > Thanks,
> > > > > > > David
> > > > > > > -----
> > > > > > > 
> > > > > > > > 
> > > > > > > > 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@oracle.com wrote:
> > > > > > > > > Hi David,
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > On 5/27/20 02:00, David Holmes wrote:
> > > > > > > > > > On 27/05/2020 6:36 pm, serguei.spitsyn@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@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:
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > 
> > > > > > > > > > > > > 
> > > > > > > > > > > > > Updated JVM TI StopThread spec:
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > \
> > > > > > > > > > > > > 
> > > > > > > > > > > > > 
> > > > > > > > > > > > > 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
> > > > > > > > > > > 
> > > > > > > > > 
> > > > > > > > 
> > > > > > 
> > > > > 
> > > > 
> > 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic