RFR: 8365192: post_meth_exit should be in vm state when calling get_jvmti_thread_state [v7]
David Holmes
dholmes at openjdk.org
Wed Aug 20 05:37:43 UTC 2025
On Wed, 20 Aug 2025 04:58:20 GMT, Leonid Mesnik <lmesnik at openjdk.org> wrote:
>> The method
>> get_jvmti_thread_state()
>> should be called only while thread is in vm state.
>>
>> The post_method_exit is doing some preparation before switching to vm state. This cause issues if thread is needed to initialize jvmti thread state.
>>
>> The fix was found using jvmti stress agent and thus no additional regression test is required.
>
> Leonid Mesnik has updated the pull request incrementally with one additional commit since the last revision:
>
> NULL replaced
I'm very confused by this issue. The description indicates we are calling `get_jvmti_thread_state` from the wrong state, but nowhere here or in JBS do I see anything showing me the actual failing code path. JBS has a part of a hs_err file that reports "# fatal error: LEAF method calling lock? " but I don't see how that relates to the stated problem of being in the wrong state ??
Also you state `post_method_exit` is not called when the method terminates via an exception, but I can't see that as being the case. The MethodExit callback in JVMTI is called under all termination conditions and post_method_exit seems similarly unconditional. ??
test/hotspot/jtreg/serviceability/jvmti/events/MethodExit/ExceptionOccurred.java line 32:
> 30: * @run main/othervm/native -agentlib:ExceptionOccurred ExceptionOccurred
> 31: */
> 32: public class ExceptionOccurred {
I'm very confused by the naming here: what exception has occurred where?
test/hotspot/jtreg/serviceability/jvmti/events/MethodExit/ExceptionOccurred.java line 42:
> 40:
> 41:
> 42: // Called from ExcptionExit MethodExit callback via JNI
Suggestion:
// Called from ExceptionExit MethodExit callback via JNI
test/hotspot/jtreg/serviceability/jvmti/events/MethodExit/ExceptionOccurred/libExceptionOccurred.cpp line 32:
> 30: bool method_exit_posted = false;
> 31: static void JNICALL
> 32: cbMethodExit(jvmtiEnv* jvmti, JNIEnv* jni, jthread thread, jmethodID method,
Can you add a comment describing the logic of this callback function please. I cannot make sense of the logic below. How many times will this callback get executed?
-------------
PR Review: https://git.openjdk.org/jdk/pull/26713#pullrequestreview-3134777503
PR Review Comment: https://git.openjdk.org/jdk/pull/26713#discussion_r2286990333
PR Review Comment: https://git.openjdk.org/jdk/pull/26713#discussion_r2286984860
PR Review Comment: https://git.openjdk.org/jdk/pull/26713#discussion_r2286995606
More information about the hotspot-dev
mailing list