RFR: 8373839: Disable JVM TI suspension during JNI critical regions [v2]
Serguei Spitsyn
sspitsyn at openjdk.org
Mon Dec 22 21:33:57 UTC 2025
On Fri, 19 Dec 2025 06:16:28 GMT, David Holmes <dholmes at openjdk.org> 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
>
> David Holmes has updated the pull request incrementally with two additional commits since the last revision:
>
> - Delay suspender whilst target is in-critical
> - Revert "8373839: Disable JVM TI suspension during JNI critical regions"
>
> This reverts commit 7723275e4495cc1f514c531afe752210209617cc.
I've not look deep into this issue yet but it seems the approach below can be used to avoid suspends in JNI critical sections:
HandshakeOperation* HandshakeState::get_op_for_self(bool allow_suspend, bool check_async_exception) {
assert(_handshakee == Thread::current(), "Must be called by self");
assert(_lock.owned_by_self(), "Lock must be held");
assert(allow_suspend || !check_async_exception, "invalid case");
#if INCLUDE_JVMTI
if (allow_suspend && _handshakee->is_disable_suspend()) { <== !!!
// filter out suspend operations while JavaThread is in disable_suspend mode
allow_suspend = false;
}
#endif
if (!allow_suspend) {
return _queue.peek(no_suspend_no_async_exception_filter);
} else if (check_async_exception && !_async_exceptions_blocked) {
return _queue.peek();
} else {
return _queue.peek(no_async_exception_filter);
}
}
The `_handshakee->in_critical_atomic()` can be checked directly in the `HandshakeState::get_op_for_self()` or the `_handshakee->is_disable_suspend()` can be set instead.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/28884#issuecomment-3684247689
More information about the serviceability-dev
mailing list