RFR: 8367646: [GenShen] Control thread may overwrite gc cancellation cause set by mutator [v2]
Y. Srinivas Ramakrishna
ysr at openjdk.org
Thu Oct 9 23:38:04 UTC 2025
On Thu, 9 Oct 2025 18:23:17 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.
>
> William Kemper has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix cancellation time management, simplify normal cancellation API
LGTM!
-------------
Marked as reviewed by ysr (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/27662#pullrequestreview-3320938162
More information about the shenandoah-dev
mailing list