fix(gc): pin the two per-thread scanner latches #8552 added (main is red) - #8557
fix(gc): pin the two per-thread scanner latches #8552 added (main is red)#8557proggeramlug wants to merge 2 commits into
Conversation
main is red on the holders gate. #8545 taught the census to see perry_thread_local! declarations and #8552 replaced process-global scanner registration latches with per-thread Cell<bool> ones. Each is correct alone; together the census now sees two latches that no verdict covers: crates/perry-runtime/src/messaging.rs:163 GC_SCANNER_REGISTERED crates/perry-runtime/src/object/native_this_alias.rs:70 SCANNER_REGISTERED Both are Cell<bool> idempotence flags for ensure_*_scanner_registered(); they store a flag, never an address. They are rule T (the census cannot see through the type), so they belong on the identity-pinned frontier -- a holders verdict is rejected as stale for a rule-T declaration. Gate goes 1 -> 0; --self-test still OK. Population is 855 scanned / 621 pinned after #8545's unmasking (was 633 scanned before it).
|
Warning Review limit reached
Next review available in: 35 minutes Limit details: You’ve used all 8 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Closing — the same fix already landed as #8558, and this branch has since become unsafe to merge. We diagnosed the identical breakage independently and within minutes of each other; your analysis is correct and matches mine, including the point that the two source PRs are each right alone and only collide through the identity ratchet. Two reasons to close rather than merge:
Worth recording the shared conclusion: a |
Problem
main(3885ba491) is red on the holders gate:This is an interaction between two PRs that are each correct alone:
perry_thread_local!, closing gc: gc_runtime_root_holders.py cannot see perry_thread_local! — 248 of ~881 holders invisible #8544.Cell<bool>ones.Before #8545 the census could not see a
perry_thread_local!declaration, so#8552's new latches were invisible. After it, they are visible and unclassified,
and an unclassified holder fails the gate by design.
CI runs the bare invocation (
test.yml:411,:1434), which is the failing one.Worth noting
--listexits 0 on the same tree, so a check that used only--listwould show green.Change
Pin both on the identity-ratcheted
frontier.They are
Cell<bool>idempotence flags forensure_gc_scanner_registered()/ensure_scanner_registered()— they store a flag, never an address. The tableswhose registration they guard (
PORT_STATES,ALIASES) are the holders with GCstanding, and their scanners visit those values.
The frontier rather than a
holdersverdict is deliberate, and not apreference: these are rule T (the census cannot see through the type), and the
gate rejects a
holdersentry for a rule-T declaration as stale. I tried theverdict first and it stayed red with
inventory has 2 stale entries.Verification
python3 scripts/gc_runtime_root_holders.py— exit 1 -> 0python3 scripts/gc_runtime_root_holders.py --self-test— OK (89 planteddeclarations classified, 68 inventory entries checked)
scanned before it)
deleting
reg_scanner!(crate::module_require::scan_module_path_roots_mut)from
gc/mod.rsmakes the gate exit 1. fix(gc): census perry_thread_local holders #8545's promise holds.No version bump.