RFR: 8274301: Locking with _no_safepoint_check_flag does not check NJT
David Holmes
dholmes at openjdk.java.net
Fri Oct 15 04:02:48 UTC 2021
On Thu, 14 Oct 2021 21:04:29 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:
> There are Mutexes that have a safepoint checking rank, that are locked via:
> MutexLocker ml(safepoint_lock, Mutex::_no_safepoint_check_flag);
>
> These don't assert for the inconsistency because the thread that calls this is a NonJavaThread.
>
> But if you lock
> MutexLocker ml(nosafepoint_lock); // default safepoint check
>
> These *will* assert for the safepoint checking inconsistency even for NonJavaThreads.
>
> NonJavaThreads don't participate in the safepoint checking protocol. And some of these safepoint checking locks are shared between java and nonjava threads. So in the existing code, there's a mix of locking with _no_safepoint_check_flag and not.
>
> This has a wrinkle because if you have a safepoint checking lock, and call wait on it, we now have to handle the case that the caller is a NonJavaThread and should not safepoint check (just like the Mutex::lock call).
>
> Maybe this shouldn't be fixed, and we should just document the discrepancy.
>
> Tested with tier1-3.
Hi Coleen,
If a `MutexLocker`/`MonitorLocker` is only acquired by NJT's then the `_no_safepoint_check` flag is redundant. If it is also used by a JT then of course the flag must remain.
You don't need to make any changes to `Monitor::wait()` because NJTs should only be calling `Monitor::wait_without_safepoint_check()`. The `MonitorLocker::wait` call should call the appropriate `Monitor` function based on the flag and/or the type of thread.
Thanks,
David
-------------
PR: https://git.openjdk.java.net/jdk/pull/5959
More information about the hotspot-dev
mailing list