diff --git a/changelog.d/6805-test-reset-c5a-sets.md b/changelog.d/6805-test-reset-c5a-sets.md new file mode 100644 index 0000000000..9c9c0a501f --- /dev/null +++ b/changelog.d/6805-test-reset-c5a-sets.md @@ -0,0 +1 @@ +test(runtime): the class-field inline-guard test reset also clears the C5a per-key vetting hash sets, removing cross-test order dependence for reused key names (CodeRabbit follow-up on #6802). diff --git a/crates/perry-runtime/src/object/descriptor_state.rs b/crates/perry-runtime/src/object/descriptor_state.rs index 79191092ff..2a3d512d12 100644 --- a/crates/perry-runtime/src/object/descriptor_state.rs +++ b/crates/perry-runtime/src/object/descriptor_state.rs @@ -147,6 +147,16 @@ pub(crate) fn class_field_inline_guard_enabled() -> bool { #[cfg(test)] pub(crate) fn test_reset_class_field_inline_guard() { PERRY_CLASS_FIELD_INLINE_GUARD_DISABLED.store(0, Ordering::Relaxed); + // Also clear the C5a per-key vetting sets (production-monotonic, so + // without this a key name reused across tests in one process would + // inherit an earlier test's declared-field / installed-key state and + // make the disable decision order-dependent (CodeRabbit on #6802). + if let Ok(mut guard) = DECLARED_FIELD_NAME_HASHES.write() { + guard.take(); + } + if let Ok(mut guard) = PROTO_DESCRIPTOR_KEY_HASHES.write() { + guard.take(); + } } /// #5654: flip the process-wide inline gate only when the descriptor target can