Repository navigation
fix: empty frame closes path - #1576
Open
rvolosatovs wants to merge 13 commits into
Open
rvolosatovs wants to merge 13 commits into
rvolosatovs wants to merge 13 commits into
Conversation
An empty frame closes its path, after which no more frames may be sent on it. A pending `future` without a payload type has an empty value encoding, so its resolution is signalled by closing its path. Assisted-by: claude:claude-opus-5-5
rvolosatovs
force-pushed
the
fix/empty-frame-closes-path
branch
from
October 23, 2026 17:47
9ec8458 to
76d1cfa
Compare
rvolosatovs
marked this pull request as ready for review
October 23, 2026 17:47
Ingress closes the subscription of a path on an empty frame and fails on any further frame for it. `Outgoing::close` sends an empty frame, which `write_future` uses to signal the resolution of a value with an empty encoding, such as that of a `future` without a payload type. Invocations with no parameters send just the header. Assisted-by: claude:claude-opus-5-5
rvolosatovs
force-pushed
the
fix/empty-frame-closes-path
branch
2 times, most recently
from
October 23, 2026 18:05
c453b66 to
3b4748f
Compare
The frame stream reader closes the channel of a path on an empty frame and stops on any further frame for it. Once their path is closed, readers return the error that stopped the frame stream reader, if any, instead of `io.ErrUnexpectedEOF`. Empty writes send no frames, `IndexWriter.ClosePath` sends an empty frame, and invocations with no parameters send just the header. Assisted-by: claude:claude-opus-5-5
An empty frame closes its sub-stream, and any further frame for it fails the invocation. `Outgoing.write` skips empty data, and `Outgoing.close` sends an empty frame. Assisted-by: claude:claude-opus-5-5
`Outgoing.write` no longer sends an empty frame for empty data, which is a breaking change. Assisted-by: claude:claude-opus-5-5
Close the path of a future whose value encodes to no bytes without skipping the deferred values of it, and construct the closed path set with `Default`. Assisted-by: claude:claude-opus-5-5
`Outgoing.write` no longer sends empty frames, so a future whose value encodes to no bytes was never resolved for the peer. Close its sub-stream instead, like the Rust implementation does. Assisted-by: claude:claude-opus-5-5
A path closed cleanly by its peer reported `io.ErrUnexpectedEOF`, the same as one cut off by the end of transmit, unlike the Rust `Incoming`. Assisted-by: claude:claude-opus-5-5
`Mux.closed` held the key of every closed path until the end of the invocation, so it grew with every element of a long stream of futures. Track closure on the trie nodes and buffered paths instead, which are forgotten once finished. An empty frame for a forgotten path is accepted, like the first one. Assisted-by: claude:claude-opus-5-5
…tream is closed Wait for the sub-stream of a pending future before decoding its value, so that a future whose value has an empty encoding is not resolved before the peer closes its path. Assisted-by: claude:claude-opus-5-5
`t.future()` describes a bare `future`, whose pending value is resolved once its sub-stream is closed and decodes to `undefined`. Assisted-by: claude:claude-opus-5-5
Bare `future` types are generated as `wrpc.Receiver[struct{}]`. A pending
one is resolved once its path is closed and closes its path once
resolved.
Assisted-by: claude:claude-opus-5-5
Exercise the resolution of pending bare futures in both directions across the Rust, Go and JS implementations. Assisted-by: claude:claude-opus-5-5
rvolosatovs
force-pushed
the
fix/empty-frame-closes-path
branch
from
October 24, 2026 08:38
3b4748f to
235ad85
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
No description provided.