RFR: 8365192: post_meth_exit should be in vm state when calling get_jvmti_thread_state [v2]
Leonid Mesnik
lmesnik at openjdk.org
Wed Aug 13 06:26:17 UTC 2025
On Wed, 13 Aug 2025 06:03:38 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:
>> Leonid Mesnik has updated the pull request incrementally with one additional commit since the last revision:
>>
>> simplified after feedback
>
> src/hotspot/share/prims/jvmtiExport.cpp line 1839:
>
>> 1837: JRT_BLOCK
>> 1838: state = get_jvmti_thread_state(thread);
>> 1839: JRT_BLOCK_END
>
> The `JRT_BLOCK` is defined as:
>
> #define JRT_BLOCK \
> { \
> assert(current == JavaThread::current(), "Must be"); \
> ThreadInVMfromJava __tiv(current); \
> JavaThread* THREAD = current; /* For exception macros. */ \
> DEBUG_ONLY(VMEntryWrapper __vew;)
>
>
> I'd suggest something like this instead of using `JRT_BLOCK`:
>
> - JvmtiThreadState *state = get_jvmti_thread_state(thread);
> + JvmtiThreadState *state = nullptr;
> + {
> + ThreadInVMfromJava __tiv(thread);
> + state = get_jvmti_thread_state(thread);
> + }
>
>
> Alternatively, the `JRT_BLOCK` can be started at the line 1837 and ended with `JRT_BLOCK_END` at the line 1875. Not sure, what issue we can encounter with this though. At least, it is worth a try.
As I understand the post_method_entry was called via JRT_BLOCK_ENTRY and not JRT_BLOCK by the reason. We need to be in Java. See comments for the method invocation.
// This is a JRT_BLOCK_ENTRY because we have to stash away the return oop
// before transitioning to VM, and restore it after transitioning back
// to Java. The return oop at the top-of-stack, is not walked by the GC.
JRT_BLOCK_ENTRY(void, InterpreterRuntime::post_method_exit(JavaThread* current))
LastFrameAccessor last_frame(current);
JvmtiExport::post_method_exit(current, last_frame.method(), last_frame.get_frame());
JRT_END
And thanks for simplification, it is a good idea. I've updated the PR.
I am running tier1-8 for Hotspot tests to ensure that nothing is broken.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26713#discussion_r2272174407
More information about the serviceability-dev
mailing list