Integrated: 8367646: [GenShen] Control thread may overwrite gc cancellation cause set by mutator

William Kemper wkemper at openjdk.org
Fri Oct 10 00:19:13 UTC 2025


On Mon, 6 Oct 2025 22:00:01 GMT, William Kemper <wkemper at openjdk.org> wrote:

> I believe the following events could lead to this assertion failure:
> 1. Control thread reads the heap's gc cancellation cause as `shenandoah_concurrent_gc` 
> 2. Mutator thread has an allocation failure and sets the heap's gc cancellation cause to `shenandoah_alloc_failure`
> 3. Control thread uses stale value from `1` and decides to unconditionally clear the cancellation cause
> 4. Mutator thread assert that gc is still cancelled
> 
> The proposed fix here has the control thread use a CAS operation to only clear the gc if the existing value is `shenandoah_concurrent_gc`. This will stop the control thread from erroneously changing the value if a mutator has already set it to `shenandoah_alloc_failure`. A mutator thread may still have an allocation failure after the control thread has cleared the cancellation, but this is normal and expected.

This pull request has now been integrated.

Changeset: d6e2d4eb
Author:    William Kemper <wkemper at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/d6e2d4eb1f87016ab158b62c61c33c4bf92a0ed4
Stats:     32 lines in 6 files changed: 19 ins; 5 del; 8 mod

8367646: [GenShen] Control thread may overwrite gc cancellation cause set by mutator

Reviewed-by: ysr, kdnilsen

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

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


More information about the shenandoah-dev mailing list