RFR: 8224852: JVM crash on watched field access from native code [v3]

Serguei Spitsyn sspitsyn at openjdk.org
Wed Oct 22 05:06:42 UTC 2025


On Wed, 22 Oct 2025 03:28:59 GMT, Leonid Mesnik <lmesnik at openjdk.org> wrote:

>> src/hotspot/share/prims/jvmtiExport.cpp line 2283:
>> 
>>> 2281:   // In this case the frame is only marked for deoptimization but still remains compiled.
>>> 2282:   // Also, the last frame might be compiled if events were not enabled for
>>> 2283:   // this thread. The thread filtering is done later.
>> 
>> Q: The following part of comment is confusing: `" ... if events were not enabled for this thread."
>>      How do we post the events if they were not enabled? Do I miss anything?
>
> Yes
> The
> jni_GetField_probe
> is called on every field if any of fields access event is envabled.
> 
>   /* Keep JVMTI addition small and only check enabled flag here.       */ \
>   if (JvmtiExport::should_post_field_access()) { \
>     o = JvmtiExport::jni_GetField_probe(thread, obj, o, k, fieldID, false); \
>   } \
> 
> The jni_GetField_probe checks if the events are enabled for this specific field on any thread for any jvmtiEnv and call
> 
> post_field_access_by_jni
> 
> which prepare all the data and call 
> 
> post_field_access
> 
> Only on this level it is check which threads and environments should post events. I suspect that it is done for unification of jni/non-jni check.
> 
>  So ```post_field_access_by_jni```  is executed for threads where events is not enabled.

I see now, thanks! But then it means the comments are not easy to understand correctly. :)

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/27584#discussion_r2450445678


More information about the serviceability-dev mailing list