RFR: 8274301: Locking with _no_safepoint_check_flag does not check NJT
Coleen Phillimore
coleenp at openjdk.java.net
Thu Oct 14 21:13:02 UTC 2021
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.
-------------
Commit messages:
- 8274301: Locking with _no_safepoint_check_flag does not check NJT
Changes: https://git.openjdk.java.net/jdk/pull/5959/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5959&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8274301
Stats: 48 lines in 11 files changed: 10 ins; 7 del; 31 mod
Patch: https://git.openjdk.java.net/jdk/pull/5959.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5959/head:pull/5959
PR: https://git.openjdk.java.net/jdk/pull/5959
More information about the hotspot-dev
mailing list