RFR: 8338763: GenShen: Global GC should not swap remembered sets for the verifier [v2]
Y. Srinivas Ramakrishna
ysr at openjdk.org
Thu Aug 22 22:26:23 UTC 2024
On Thu, 22 Aug 2024 21:29:33 GMT, William Kemper <wkemper at openjdk.org> wrote:
>> It seems that subsequent improvements to remembered set verification have made this change unnecessary.
>>
>> ## Testing
>> GHA, internal pipelines and local dacapo runs
>
> William Kemper has updated the pull request incrementally with one additional commit since the last revision:
>
> Do not swap remembered set for global degenerated cycles either
Yes, it looks like the verification closure makes a distinction between when it's called and checks the appropriate version of the card table.
But the code is a bit subtle, and might benefit with a documentation note to this effect in the closure where one or the other version of the card table is used for the checks.
inline void work(T* p) {
T o = RawAccess<>::oop_load(p);
if (!CompressedOops::is_null(o)) {
oop obj = CompressedOops::decode_not_null(o);
if (_heap->is_in_young(obj)) {
size_t card_index = _scanner->card_index_for_addr((HeapWord*) p);
if (_init_mark && !_scanner->is_card_dirty(card_index)) {
ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, nullptr,
"Verify init-mark remembered set violation", "clean card should be dirty", __FILE__, __LINE__);
} else if (!_init_mark && !_scanner->is_write_card_dirty(card_index)) {
ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, nullptr,
"Verify init-update-refs remembered set violation", "clean card should be dirty", __FILE__, __LINE__);
}
}
}
}
-------------
Marked as reviewed by ysr (Committer).
PR Review: https://git.openjdk.org/shenandoah/pull/485#pullrequestreview-2255906122
More information about the shenandoah-dev
mailing list