RFR: 8308387: CLD created and unloading list sharing _next node pointer leads to concurrent YC missing CLD roots [v3]

Axel Boldt-Christmas aboldtch at openjdk.org
Wed May 31 12:34:02 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

Axel Boldt-Christmas has updated the pull request incrementally with one additional commit since the last revision:

  Use stafanks comment
  
  Co-authored-by: Stefan Karlsson <stefan.karlsson at oracle.com>

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/14241/files
  - new: https://git.openjdk.org/jdk/pull/14241/files/13b1748d..a101a4fd

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=14241&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14241&range=01-02

  Stats: 20 lines in 1 file changed: 8 ins; 0 del; 12 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