RFR: 8373468: Shenandoah: Mutator may block at _gc_waiters_lock after allocation failure even block parameter is false
Xiaolong Peng
xpeng at openjdk.org
Thu Dec 11 08:06:21 UTC 2025
There is behavior discrepancy between Shenandoah generational mode and non-generational when it handles mutator allocation failure, as stated in the description of [JDK-8373468](https://bugs.openjdk.org/browse/JDK-8373468), in non-generational, the `block` parameter may not always work.
Further looking into ShenandoahGenerationalControlThread and ShenandoahControlThread, they handle the _requested_gc_cause and ShenandoahHeap::cancelled_cause differently in other places as well, the change in this PR will minimize the gap to unify the behavior, and also fix potentially missed allocation failure notifications in some rare cases for both control threads.
### Test
- [x] hotspot_gc_shenandoah
- [ ] GHA (includes tier1 but no unit unit with gtest)
- [x] gtest
-------------
Commit messages:
- Need to clear _gc_requested and _requested_gc_cause after checking
- Align behaviour for non-generational mode
- Fix
- Add missing header file runtime/atomic.hpp
- Use Atomic to store _requested_gc_cause to ensure atomicity
- alloc_failure_pending set to true if _requested_gc_cause is alloc failure
- Fix a build error
- Shenandoah: Mutator may block at _gc_waiters_lock after allocation failure even block parameter is false
Changes: https://git.openjdk.org/jdk/pull/28758/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28758&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8373468
Stats: 51 lines in 6 files changed: 28 ins; 1 del; 22 mod
Patch: https://git.openjdk.org/jdk/pull/28758.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/28758/head:pull/28758
PR: https://git.openjdk.org/jdk/pull/28758
More information about the hotspot-gc-dev
mailing list