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