RFR: 8242425: JVMTI monitor operations should use Thread-Local Handshakes

David Holmes david.holmes at oracle.com
Mon Apr 20 02:29:54 UTC 2020


Hi Yasumasa,

This looks good. A couple of minor nits below.

On 20/04/2020 10:32 am, Yasumasa Suenaga wrote:
> Hi all,
> 
> Could you review it?
> 
>    JBS: https://bugs.openjdk.java.net/browse/JDK-8242425
>    webrev: http://cr.openjdk.java.net/~ysuenaga/JDK-8242425/webrev.02/

src/hotspot/share/prims/jvmtiEnvBase.hpp

This comment needs expanding now:

295   // JVMTI API helper functions which are called at safepoint or 
thread is suspended.

Can you fix up the indentation here please:

  304   jvmtiError get_current_contended_monitor(JavaThread *java_thread,
  305                                                          jobject 
*monitor_ptr);
  306   jvmtiError get_owned_monitors(JavaThread* java_thread,
  307 
GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list);

the second lines should line up with the J in JavaThread.

Could you put the initializers on a separate line each please:

  388     : HandshakeClosure("GetOwnedMonitorInfo"),
  389       _env(env), _result(JVMTI_ERROR_NONE), 
_owned_monitors_list(owned_monitor_list) {}

Similarly for:

  428     : HandshakeClosure("GetOneCurrentContendedMonitor"),
  429       _env(env), _owned_monitor_ptr(mon_ptr),
  430       _result(JVMTI_ERROR_THREAD_NOT_ALIVE) {}

---

No need for updated webrev.

Thanks,
David
-----


> I need one more reviewer to push.
> 
> 
> Thanks,
> 
> Yasumasa
> 
> 
> On 2020/04/17 5:13, serguei.spitsyn at oracle.com wrote:
>> Hi Yasumasa,
>>
>> Thank you for the update.
>> It looks good.
>>
>> Thanks,
>> Serguei
>>
>>
>> On 4/10/20 04:30, Yasumasa Suenaga wrote:
>>> Hi Serguei,
>>>
>>> I use current_jt in this webrev. Could you review again?
>>>
>>>   http://cr.openjdk.java.net/~ysuenaga/JDK-8242425/webrev.02/
>>>
>>> I tested this change with vmTestbase/nsk/jvmti, they are fine on my 
>>> Linux x64.
>>>
>>>
>>> Thanks,
>>>
>>> Yasumasa
>>>
>>>
>>> On 2020/04/10 17:21, serguei.spitsyn at oracle.com wrote:
>>>> Hi Yasumasa,
>>>>
>>>> Thank you for the update.
>>>>
>>>> Minor:
>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8242425/webrev.01/src/hotspot/share/prims/jvmtiEnvBase.cpp.udiff.html 
>>>>
>>>>
>>>> + err = get_locked_objects_in_frame(JavaThread::current(), 
>>>> java_thread, jvf, owned_monitors_list, depth-1); . . .
>>>>
>>>> + JvmtiMonitorClosure jmc(java_thread, JavaThread::current(), 
>>>> owned_monitors_list, this);
>>>>
>>>> You can use current_jt instead of JavaThread::current() above.
>>>>
>>>> There is also some test coverage in the 
>>>> vmTestbase/nsk/jvmti/scenarios tests.
>>>> This one as well:
>>>> test/hotspot/jtreg/vmTestbase/nsk/jvmti/unit/functions/nosuspendMonitorInfo/JvmtiTest 
>>>>
>>>> Probably it is easier to run all vmTestbase/nsk/jvmti tests.
>>>>
>>>> Thanks,
>>>> Serguei
>>>>
>>>>
>>>> On 4/10/20 01:05, Yasumasa Suenaga wrote:
>>>>> Hi Serguei,
>>>>>
>>>>> Thanks for your comment!
>>>>> I uploaded new webrev:
>>>>>
>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8242425/webrev.01/
>>>>>
>>>>> I ran following tests, and all of them were passed on my Linux x64.
>>>>>
>>>>>  - vmTestbase/nsk/jvmti/GetCurrentContendedMonitor
>>>>>  - vmTestbase/nsk/jvmti/GetOwnedMonitorInfo
>>>>>  - vmTestbase/nsk/jdi
>>>>>  - vmTestbase/nsk/jdwp
>>>>>  - serviceability/jvmti/GetOwnedMonitorInfo
>>>>>  - serviceability/jvmti/GetOwnedMonitorStackDepthInfo
>>>>>  - serviceability/jdwp
>>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Yasumasa
>>>>>
>>>>>
>>>>> On 2020/04/10 14:50, serguei.spitsyn at oracle.com wrote:
>>>>>> Hi Yasumasa,
>>>>>>
>>>>>> It looks pretty good in general.
>>>>>> A couple of comments though.
>>>>>>
>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8242425/webrev.00/src/hotspot/share/prims/jvmtiEnvBase.cpp.frames.html 
>>>>>>
>>>>>>
>>>>>> 650 JvmtiEnvBase::get_current_contended_monitor(JavaThread 
>>>>>> *java_thread, jobject *monitor_ptr) {
>>>>>> 651 assert(!Thread::current()->is_VM_thread() &&
>>>>>> 652 (Thread::current() == java_thread ||
>>>>>> 653 Thread::current() == java_thread->active_handshaker()),
>>>>>> 654 "call by myself or at direct handshake");
>>>>>>
>>>>>>   ...
>>>>>>
>>>>>> 685 JvmtiEnvBase::get_owned_monitors(JavaThread* java_thread,
>>>>>>   686 GrowableArray<jvmtiMonitorStackDepthInfo*> 
>>>>>> *owned_monitors_list) {
>>>>>>   687   jvmtiError err = JVMTI_ERROR_NONE;
>>>>>> 688 assert(!Thread::current()->is_VM_thread() &&
>>>>>> 689 (Thread::current() == java_thread ||
>>>>>> 690 Thread::current() == java_thread->active_handshaker()),
>>>>>> 691 "call by myself or at direct handshake");
>>>>>>
>>>>>> I'd suggest to add this at the beginning:
>>>>>>    JavaThread *current_jt = JavaThread::current();
>>>>>>
>>>>>>
>>>>>> 676 JavaThread *current_jt = reinterpret_cast<JavaThread 
>>>>>> *>(JavaThread::current());
>>>>>>
>>>>>> There is not need in reinterpret_cast<JavaThread *>. Also, you can 
>>>>>> use the current_jt defined above.
>>>>>>
>>>>>> Also, please, removed these two definitions as they became unused 
>>>>>> with your fix:
>>>>>>     src/hotspot/share/runtime/vmOperations.hpp: 
>>>>>> template(GGetCurrentContendedMonitoretOwnedMonitorInfo) \
>>>>>>     src/hotspot/share/runtime/vmOperations.hpp: 
>>>>>> template()            \
>>>>>>
>>>>>> The impacted JVMTI monitor functions are used in the JDWP agent to 
>>>>>> support the JDI ThreadReference implementation.
>>>>>> To be safe the JDI & JDWP tests have to be run as well. It is well 
>>>>>> covered by the tier-5.
>>>>>>
>>>>>> Thanks,
>>>>>> Serguei
>>>>>>
>>>>>>
>>>>>> On 4/9/20 21:46, Yasumasa Suenaga wrote:
>>>>>>> Hi all,
>>>>>>>
>>>>>>> Please review this change:
>>>>>>>
>>>>>>>   JBS: https://bugs.openjdk.java.net/browse/JDK-8242425
>>>>>>>   webrev: 
>>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8242425/webrev.00/
>>>>>>>
>>>>>>> We've discussed to use Thread-Local Handshake in some JVMTI 
>>>>>>> functions [1].
>>>>>>> This change is for monitor functions. It affects 
>>>>>>> GetOwnedMonitorInfo(), GetOwnedMonitorStackDepthInfo(), 
>>>>>>> GetCurrentContendedMonitor().
>>>>>>>
>>>>>>> It passed tests on submit repo 
>>>>>>> (mach5-one-ysuenaga-JDK-8242425-20200410-0228-10075639), and also 
>>>>>>> I confirmed to pass following tests:
>>>>>>>
>>>>>>>  - serviceability/jvmti/GetOwnedMonitorInfo
>>>>>>>  - serviceability/jvmti/GetOwnedMonitorStackDepthInfo
>>>>>>>  - vmTestbase/nsk/jvmti/GetCurrentContendedMonitor
>>>>>>>  - vmTestbase/nsk/jvmti/GetOwnedMonitorInfo
>>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Yasumasa
>>>>>>>
>>>>>>>
>>>>>>> [1] 
>>>>>>> https://mail.openjdk.java.net/pipermail/serviceability-dev/2020-March/030890.html 
>>>>>>>
>>>>>>
>>>>
>>


More information about the serviceability-dev mailing list