Fix stdio frame interleaving under backpressure - #266
Draft
rohitsalla wants to merge 1 commit into
Draft
Conversation
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.
Fixes #263
Summary
StdioTransport.send()calls in FIFO order.EAGAINretry behavior.Root cause
StdioTransportis an actor, but its write loop suspends while retryingEAGAIN. Actor reentrancy allowed a secondsend()call to write while the first frame was only partially written, splicing one JSON-RPC frame into another.Each send now waits for the previously enqueued send to complete before entering the write loop. A failed send does not prevent later queued sends from running.
Verification
ordered=false, with the second frame's newline inside the first payload.ordered=true, first newline at the expected 524288-byte boundary.git diff --checkpasses.The full
swift testtarget could not run locally because the installed macOS Command Line Tools lack the repository's existingTestingmodule and have a Swift compiler/SDK patch mismatch. The pull request CI matrix provides the required Swift 6.1 macOS and Linux coverage.