On Thu, 18 Dec 2025 01:24:42 GMT, David Holmes <[email protected]> wrote:

> To ensure JNI critical access to a raw array can't interfere with actions of 
> the debugger, we disable JVM TI suspension whilst JNI critical access is 
> active, as originally suggested by @fisk. We assume the debugger is being 
> operated correctly (ie the thread using the raw array will be suspended), and 
> that the critical section is short so as to not delay debugging too long. 
> 
> The mechanism for this already exists courtesy of the virtual thread support.
> 
> Testing:
>  - tiers 1 - 6 sanity

This is a nice fix, regardless of my opinion about pre/post-decrement. Thank 
you David.

src/hotspot/share/runtime/javaThread.hpp line 966:

> 964:   void exit_critical() {
> 965:     assert(Thread::current() == this, "this must be current thread");
> 966:     if (_jni_active_critical-- == 1) {

Suggestion:

    if (--_jni_active_critical == 0) {

I know my suggested line really does the same as yours, but this way I feel 
it's easier to see that we re-enable suspension when the number of active 
critical regions are down to 0. I.e. I prefer pre-decrement and compare to 0, 
vs. post-decrement and compare to 1.

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

Marked as reviewed by fbredberg (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/28884#pullrequestreview-3593033724
PR Review Comment: https://git.openjdk.org/jdk/pull/28884#discussion_r2631125115

Reply via email to