RFR: 8372566: Genshen: crash at ShenandoahScanRemembered::process_clusters after JDK-8371667

Kelvin Nilsen kdnilsen at openjdk.org
Fri Nov 28 15:29:57 UTC 2025


On Fri, 28 Nov 2025 15:26:35 GMT, Kelvin Nilsen <kdnilsen at openjdk.org> wrote:

>> For non-plab allocs in old gen, the objects need to be registered in card table, which was missed in the [PR](https://git.openjdk.org/jdk/pull/28247) for JDK-8371667. The bug didn't cause jtreg test failures in GHA and my local test, but when I ran specjbb benchmarks, it did cause crash at ShenandoahScanRemembered::process_clusters when GC scans remembered set. 
>> 
>> The bug may cause other issue since the object in old gen is not properly registered, e.g. marking phase have wrong result.
>> 
>> Tests:
>> - [x]  specjbb, no crash
>> - [x] hotspot_gc_shenandoah
>
> src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp line 1018:
> 
>> 1016:   if (result != nullptr && req.is_old()) {
>> 1017:     old_generation()->configure_plab_for_current_thread(req);
>> 1018:     if (req.type() != ShenandoahAllocRequest::_alloc_plab) {
> 
> Help me understand this.  I am thinking that this is equivalent (in the new refactoring) to: req.type() == _alloc_shared_gc_old or _alloc_shared_gc_promotion.  But this way of writing it is a bit more efficient (as other values can't happen).
> 
> Am I understanding this correctly?

Maybe a comment would be helpful.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28521#discussion_r2571985986


More information about the shenandoah-dev mailing list