You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The comms addEgress method, which provides an out-of-band export operation (e.g. what you do on the chain when you're provisioning a client, to bootstrap the initial object reference), is failing to mark the downstream/importing c-list entry as "reachable". The result is that if the downstream machine ever drops the exported object, the refcount would go negative, causing an exception in the processing of that message.
The remote.setReachable() method takes an lref and an isImport boolean. The addEgress function was calling setReachable with "false" when it should have been "true". I think I confused myself with the parameter name: it doesn't mention which side is doing the importing. I'm going to replace that with isImportFromComms to make it more clear. Then I'll fix the flag and add a test.
The text was updated successfully, but these errors were encountered:
`addEgress` was calling `setReachable` with the wrong value for
`isImportFromComms`. When we add an egress, the kernel is exporting an object
into comms, and comms is exporting that to the downstream machine. So the
downstream machine is *importing* it from comms (which means the
`isReachable` flag causes the `reachable` refcount to be increased, something
that only happens on imports, not on the export).
This caused the object being exported through `addEgress` to have a zero
refcount. If/when the downstream machine ever dropped it, the refcount would
go negative, causing an error.
fixes#3483
`addEgress` was calling `setReachable` with the wrong value for
`isImportFromComms`. When we add an egress, the kernel is exporting an object
into comms, and comms is exporting that to the downstream machine. So the
downstream machine is *importing* it from comms (which means the
`isReachable` flag causes the `reachable` refcount to be increased, something
that only happens on imports, not on the export).
This caused the object being exported through `addEgress` to have a zero
refcount. If/when the downstream machine ever dropped it, the refcount would
go negative, causing an error.
fixes#3483
`addEgress` was calling `setReachable` with the wrong value for
`isImportFromComms`. When we add an egress, the kernel is exporting an object
into comms, and comms is exporting that to the downstream machine. So the
downstream machine is *importing* it from comms (which means the
`isReachable` flag causes the `reachable` refcount to be increased, something
that only happens on imports, not on the export).
This caused the object being exported through `addEgress` to have a zero
refcount. If/when the downstream machine ever dropped it, the refcount would
go negative, causing an error.
fixes#3483
Describe the bug
The comms
addEgress
method, which provides an out-of-band export operation (e.g. what you do on the chain when you're provisioning a client, to bootstrap the initial object reference), is failing to mark the downstream/importing c-list entry as "reachable". The result is that if the downstream machine ever drops the exported object, the refcount would go negative, causing an exception in the processing of that message.The
remote.setReachable()
method takes an lref and anisImport
boolean. TheaddEgress
function was callingsetReachable
with "false" when it should have been "true". I think I confused myself with the parameter name: it doesn't mention which side is doing the importing. I'm going to replace that withisImportFromComms
to make it more clear. Then I'll fix the flag and add a test.The text was updated successfully, but these errors were encountered: