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