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