RFR: 8352918: Shenandoah: Verifier does not deactivate barriers as intended

Aleksey Shipilev shade at openjdk.org
Wed Mar 26 20:09:14 UTC 2025


On Wed, 26 Mar 2025 19:17:33 GMT, William Kemper <wkemper at openjdk.org> wrote:

> When verifying reachable objects, Shenandoah's verifier clears the `_gc_state` with the intention of deactivating barriers. However, the mechanism for this is a `friend` of the heap and does not toggle the flag to cause threads to use the value set on the verifier's safepoint. The net effect here is that the barriers are _not_ deactivated during verification. Leaving the barriers on while the verifier traverses the heap may have unintended consequences (cards marked, objects evacuated, etc.)

Ouch. Took me a while to understand which field is updated, since fields are named the same in `ShenandoahHeap` and here. I suggest renaming fields in `ShenandoahGCStateResetter` to `_saved_gc_state` and `_saved_gc_state_changed`.

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

Marked as reviewed by shade (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/24264#pullrequestreview-2718502261


More information about the shenandoah-dev mailing list