RFR: 8319244: implement JVMTI handshakes support for virtual threads [v8]
Serguei Spitsyn
sspitsyn at openjdk.org
Sat Nov 18 14:35:30 UTC 2023
On Sat, 18 Nov 2023 02:29:26 GMT, Alex Menkov <amenkov at openjdk.org> wrote:
>> Serguei Spitsyn has updated the pull request incrementally with one additional commit since the last revision:
>>
>> review: add jdk_internal_vm_Continuation::done(cont) check to JvmtiEnvBase::is_vthread_alive
>
> src/hotspot/share/prims/jvmtiEnvBase.cpp line 1989:
>
>> 1987: } else {
>> 1988: Handshake::execute(hs_cl, tlh, target_jt); // delegate to Handshake implementation
>> 1989: }
>
> Every implementation of JvmtiUnitedHandshakeClosure has to check if the target thread is virtual and call do_vthread manually.
> I'd suggest to handle this by proxy class, something like
> Suggestion:
>
> class Adapter : public HandshakeClosure {
> JvmtiUnitedHandshakeClosure* _hs_cl;
> Handle _target_h;
> public:
> Adapter(JvmtiUnitedHandshakeClosure* hs_cl, Handle target_h)
> : HandshakeClosure(hs_cl->name()), _hs_cl(hs_cl), _target_h(target_h) {}
> virtual void do_thread(Thread* thread) {
> if (java_lang_VirtualThread::is_instance(_target_h())) { // virtual thread
> _hs_cl->do_vthread(_target_h);
> } else {
> _hs_cl->do_thread(target);
> }
> }
> } adapter(hs_cl, target_h);
>
> if (self) { // target thread is current
> adapter.do_thread(target_jt); // execute handshake closure callback on current thread directly
> } else {
> Handshake::execute(&adapter, tlh, target_jt); // delegate to Handshake implementation
> }
Thank you for the suggestion! Agreed, this should help to get rid of this duplication/ugliness.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16460#discussion_r1398218934
More information about the serviceability-dev
mailing list