Re: SturdyRefs and boot-comm (hangs)
Kevin Reid <[email protected]>
| Newsgroups | gmane.comp.lang.e.general |
|---|---|
| Message-ID | <[email protected]> |
On Mar 10, 2010, at 14:44, Thomas Leonard wrote: > SturdyRefs are not PassByProxy, but BootRefHandler doesn't know how to > send them, so it pretends they are: > [...] > But in the constructor, only PassByProxy objects get an identity: > [...] > This causes a <Promise> to be sent. The receiver calls > <Promise>.__whenMoreResolved, but when the SturdyRef tries to send > itself back in the reply, it gets turned into a promise again, so the > receiver calls __whenMoreResolved again, forever. I agree that the boot-comm system shouldn't hang like this, bit I don't have the knowledge to judge your analysis or suggest how to fix this immediately. As a pragmatic fix, I suggest you use the virtualize/1 operation on seedVat; it causes the user-level communication to occur over CapTP rather than boot-comm. In general, boot-comm is really only for bootstrapping purposes, because 3-way reference shortening can only occur over a homogeneous comm system. If your process has vats A and B communicating over boot- comm, and B has a CapTP reference to C which it passes to A, it is impossible or impractical to shorten that into a direct CapTP reference from A to C; MarkM and I spent an hour some time ago working this out. For cheap yet complete inter-vat communication, what *is* practical is to make sure CapTP doesn't use crypto when communicating between vats in the same process or OS -- not yet implemented. -- Kevin Reid <http://switchb.org/kpreid/>