RFR: 8306767: Concurrent repacking of extra data in MethodData is potentially unsafe [v25]

Emanuel Peter epeter at openjdk.org
Thu Jan 25 09:51:59 UTC 2024


> As explained in a [comment below](https://github.com/openjdk/jdk/pull/16840#issuecomment-1833529561), we have to ensure that reading/writing/cleaning the extra data all needs to be guarded by the `extra_data_lock`, and that no safepoint should happen while holding that lock, so that the lock is not broken.
> 
> I introduced `check_extra_data_locked`, where I check that we hold the lock, and if we are a java thread (only those ever safepoint), that we currently are in a `NoSafepointVerifier` scope, hence we verify that no safepoint will be taken.
> 
> I placed `check_extra_data_locked` in all the places where we access the extra data, and then placed locks (with implicit no-safepoint-verifiers) at the call-site of those places.
> 
> I also needed to change the rank of `extra_data_lock` to `nosafepoint` and set the `Mutex::_no_safepoint_check_flag` when taking the lock. Otherwise I could not take the lock from a VM thread.
> 
> **Testing**
> Testing: tier1-3 and stress.

Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:

  moving code for Coleen

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/16840/files
  - new: https://git.openjdk.org/jdk/pull/16840/files/ff581b05..96af505c

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=16840&range=24
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=16840&range=23-24

  Stats: 62 lines in 5 files changed: 34 ins; 24 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/16840.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/16840/head:pull/16840

PR: https://git.openjdk.org/jdk/pull/16840


More information about the hotspot-dev mailing list