Reuse debug.Server instance across clients. #75
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR uses
capnp.WeakClient
to reuse a singledebug.Server
instance across multiple clients. This reduces memory consumption by reducing the number of*server.Server
instances, and corresponding goroutines. While this is not strictly necessary (we're not under any particular memory pressure), it also happens to simplify some of the server instantiation logic infeat/auth
branch of Wetware (WIP).Things to look out for during code-review:
Debugger()
can happen concurrently if theServer
is exported to a vat, and multiple incoming streams are handled in parallel. This doesn't happen in Wetware, but is part of CASM's public contract.Debugger()
must be able to instantiate a client more than once.WeakClient.AddRef()
's boolean return value specifically indicates whether the capability has been released. Notably, a nil*WeakClient
will returntrue
, so we must include a nil-pointer check.Similar PRs in https://github.com/wetware/ww will follow.