On Mon, 1 May 2023 18:26:30 GMT, Alex Menkov <amen...@openjdk.org> wrote:
>> The fix updates JVMTI FollowReferences implementation to report references >> from virtual threads: >> - unmounted vthreads are detected, their stack references for >> JVMTI_HEAP_REFERENCE_STACK_LOCAL/JVMTI_HEAP_REFERENCE_JNI_LOCAL; >> - stacks of mounted vthreads are splitted into 2 parts (virtual thread stack >> and carrier thread stack), references are reported with correct thread >> id/class tag/object tags/frame depth; >> - common code to handle stack frames are moved into separate class; >> >> Threads are reported as: >> - platform threads: JVMTI_HEAP_REFERENCE_THREAD (as before); >> - mounted vthreads (synthetic references, consider them as heap roots >> because carrier threads are roots): JVMTI_HEAP_REFERENCE_OTHER; >> - unmounted vthreads: not reported as heap roots. > > Alex Menkov has updated the pull request incrementally with one additional > commit since the last revision: > > Added "no continuations" test case src/hotspot/share/prims/jvmtiTagMap.cpp line 2319: > 2317: } > 2318: } > 2319: } The fragments 2289-2303 and 2305-2319 are based on the `StackValueCollection` and look very similar. It can be worth to refactor these fragments into two function calls: bool report_stack_value_collection(jmethodID method, int idx_base, StackValueCollection* elems, jlocation bci) { for (int index = 0; index < exprs->size(); index++) { if (exprs->at(index)->type() == T_OBJECT) { oop obj = elems->obj_at(index)(); if (obj == nullptr) { continue; } // stack reference if (!CallbackInvoker::report_stack_ref_root(thread_tag, tid, depth, method, bci, idx_base + index, obj)) { return false; } } } return true; // ??? . . . . . jlocation bci = (jlocation)jvf->bci(); StackValueCollection* locals = jvf->locals(); if (!report_stack_value_collection(method, locals, 0 /* idx_base*/, bci)) { return false; } StackValueCollection* exprs = jvf->expressions(); if (!report_stack_value_collection(method, exprs, locals->size(), bci)) { return false; } ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1182363174