RFR: 8248362: JVMTI frame operations should use Thread-Local Handshake

Yasumasa Suenaga suenaga at oss.nttdata.com
Thu Jul 23 03:12:19 UTC 2020


Hi Dan,

Thanks for your comment!
I uploaded new webrev:

   http://cr.openjdk.java.net/~ysuenaga/JDK-8248362/webrev.01/
   Diff from previous webrev: http://hg.openjdk.java.net/jdk/submit/rev/df75038b5449

On 2020/07/23 10:04, Daniel D. Daugherty wrote:
> On 7/22/20 10:38 AM, Yasumasa Suenaga wrote:
>> Hi all,
>>
>> Please review this change:
>>
>>   JBS: https://bugs.openjdk.java.net/browse/JDK-8248362
>>   webrev: http://cr.openjdk.java.net/~ysuenaga/JDK-8248362/webrev.00/
> 
> src/hotspot/share/prims/jvmtiEnv.cpp
>      L1755     // JVMTI get java stack frame location at safepoint.
>          You missed updating this one. Perhaps:
> 
>                // JVMTI get java stack frame location via direct handshake.

Fixed.


> src/hotspot/share/prims/jvmtiEnvBase.cpp
>      L1563:   JavaThread* jt = _state->get_thread();
>      L1564:   assert(target == jt, "just checking");
>          This code is different than the other closures. It might be worth
>          a comment to explain why. I don't remember why VM_GetFrameCount had
>          to use the JvmtiThreadState to fetch the JavaThread. Serguei might
>          remember.
> 
>          It could be that we don't need the _state field anymore because of
>          the way that handshakes work (and provide the JavaThread* to the
>          do_thread() function). Your choice on whether to deal with that as
>          part of this fix or following with another RFE.
> 
>          Update: Uggg.... the get_frame_count() function takes JvmtiThreadState
>          as a parameter. This is very much entangled... sigh... we should
>          definitely look at untangling this in another RFE...

I want to fix it in another RFE as you said if it is needed.
If we don't hear the reason from Serguei, I want to keep this change.


>      old L1565:   ThreadsListHandle tlh;
>      new L1565:   if (!jt->is_exiting() && jt->threadObj() != NULL) {
> 
>          Please consider add this comment above L1565:
>                   // ThreadsListHandle is not needed due to direct handshake.
> 
>          Yes, I see that previous closures were added without that comment,
>          but when I see "if (!jt->is_exiting() && jt->threadObj() != NULL)"
>          I immediately wonder where the ThreadsListHandle is... Please consider
>          adding the comment to the others also.
> 
>      old L1574:   ThreadsListHandle tlh;
>      new L1574:   if (!jt->is_exiting() && jt->threadObj() != NULL) {
> 
>          Please consider add this comment above L1574:
>                   // ThreadsListHandle is not needed due to direct handshake.

I think it is new normal as David said in the reply, and also other closures don't say about it.
So I did not change about it in new webrev.


> src/hotspot/share/prims/jvmtiEnvBase.hpp
>      L580: // HandshakeClosure to frame location.
>          typo - s/to frame/to get frame/

Fixed.


> src/hotspot/share/prims/jvmtiThreadState.cpp
>      No comments on the changes.
> 
>      For the above comments about VM_GetFrameCount, understanding why
>      JvmtiThreadState::count_frames() has to exist in JvmtiThreadState
>      will go along way towards untangling the mess.
> 
> src/hotspot/share/runtime/vmOperations.hpp
>      No comments.
> 
> 
> Thumbs up. I only have nits above. If you choose to make the above
> changes, I do not need to see another webrev.

Thanks, but I uploaded new webrev just in case :)


Yasumasa


> Dan
> 
> 
> 
>>
>> Migrate JVMTI frame operations to Thread-Local Handshakes from VM Operations.
>>
>>     - VM_GetFrameCount
>>     - VM_GetFrameLocation
>>
>> They affects both GetFrameCount() and GetFrameLocation() JVMTI functions.
>>
>> This change has passed all tests on submit repo (mach5-one-ysuenaga-JDK-8248362-20200722-1249-12859056), and vmTestbase/nsk/{jdi,jdw,jvmti}, serviceability/{jdwp,jvmti} .
>>
>>
>> Thanks,
>>
>> Yasumasa
> 


More information about the serviceability-dev mailing list