-
-
Notifications
You must be signed in to change notification settings - Fork 112
Ref Counting
Louis Thibault edited this page Aug 29, 2022
·
8 revisions
⚠️ NOTE: This page is WIP. All the essential information is there, but we really ought to make it more digestible. If something doesn't make sense, please don't give up. Drop us a line, instead!
- Each reference to a capability has an "owner." The owner is responsible for calling
.Release()
on the reference when it is no longer needed. - Generated
Foo_ServerToClient
methods return a capability reference owned by the caller. - The
.AddRef()
method returns a new reference to the same underlying capability, which is owned by the caller. - Calling
foo.Bar(baz)
wherefoo
andbaz
are capabilities transfers ownership ofbaz
tofoo
. Thefoo
instance will callbaz.Release()
when finished. - Capabilities received as arguments to an RPC handler are borrowed and will be released when the RPC handler returns. Calling
AddRef()
returns a capability (owned by the caller) that may persist beyond the scope of the RPC handler, per rule 3.
- [ BUG ] Passing the last reference for a capability to itself causes a deadlock.