-
Notifications
You must be signed in to change notification settings - Fork 212
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rewrite scanForDeadObjects to avoid retire-without-drop #9942
Conversation
Deploying agoric-sdk with Cloudflare Pages
|
479652d
to
310c064
Compare
note: revert the test.skip from 064ff1a when this lands |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Preliminary review of the commit titled add tests for #9939 to both SwingSet and liveslots
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implicit approval from #9961
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Partial review of comments in commit titled fix(liveslots): rewrite scanForDeadObjects to avoid retire-without-drop
. I am still looking through the code changes, but wanted to provide early feedback on what I believe may be an important conceptual mistake regarding recognizable only imported presence.
568549b
to
a47fa2c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new logic looks sounds, matches the descriptions, and more importantly, is much clearer than before!
no behavior changes
This rewrites scanForDeadObjects(), which is called during dispatch.bringOutYourDead to process possiblyDeadSet and possiblyRetiredSet. The new flow should be easier to review and understand. The main behavioral difference is to fix a bug (#9939) in which a vref that appears in possiblyRetiredSet (because e.g. a weak collection was deleted, which was using that vref as a key), but which 1: lacks a RAM pillar (Presence object) and 2: was not dropped in this BOYD (e.g. it has a vdata pillar), used to be sent to the kernel in a bogus `syscall.retireImports()` call. Because this vref was not previously dropped by the vat (syscall.dropImports()), this was a vat-fatal error. The new code will only retire such a Presence vref if it was not reachable by the vat. The new tests are marked as expected to pass again. thanks @mhofman and @gibson042 for recommendations fixes #9939
This reverts commit 064ff1a. Now that the underlying issue is fixed, we can re-enable this formerly-flaky test. Thanks @michaelfig for your patience.
a47fa2c
to
c045163
Compare
Rewrite scanForDeadObjects(), which is called during
dispatch.bringOutYourDead to process possiblyDeadSet and
possiblyRetiredSet. The new flow should be easier to review and
understand.
The main behavioral difference is to fix a bug (#9939) in which a vref
that appears in possiblyRetiredSet (because e.g. a weak collection was
deleted, which was using that vref as a key), but which 1: lacks a RAM
pillar (Presence object) and 2: was not dropped in this BOYD (e.g. it
has a vdata pillar), used to be sent to the kernel in a bogus
syscall.retireImports()
call. Because this vref was not previouslydropped by the vat (syscall.dropImports()), this was a vat-fatal
error.
The new code will only retire such a Presence vref if it was not
reachable by the vat.
fixes #9939