RFR: 8308387: CLD created and unloading list sharing _next node pointer leads to concurrent YC missing CLD roots
Axel Boldt-Christmas
aboldtch at openjdk.org
Wed May 31 08:35:26 UTC 2023
[JDK-8307106](https://bugs.openjdk.org/browse/JDK-8307106) introduced the ability to walk the created CLDs list in the CLDG without a lock. This was primarily introduced to allow lockless concurrent CLD roots scanning for young collections in generational ZGC. However because the CLD _next node pointer is shared between the two list this can lead to a concurrent iteration of the created CLDs missing list entries.
This change introduces a second _unloading_next node pointer which is used for the unloading CLDs list. The set_next is now maintains the invariant that it only ever unlinks is_unloading() CLDs and maintains a consistent view of the tail list for anyone reading the list concurrently.
Testing: tier1-3 and tier1-7 with Generational ZGC
-------------
Commit messages:
- Move list node accessors to inline file
- Add comment
- Assert invariant
- Add _unloading_next list node
Changes: https://git.openjdk.org/jdk/pull/14241/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14241&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8308387
Stats: 70 lines in 5 files changed: 55 ins; 9 del; 6 mod
Patch: https://git.openjdk.org/jdk/pull/14241.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/14241/head:pull/14241
PR: https://git.openjdk.org/jdk/pull/14241
More information about the hotspot-runtime-dev
mailing list