Repository navigation
Fix ensure ordered chunks not dropping controller #2167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
1egoman
merged 4 commits into
main
from
fix-ensure-ordered-chunks-not-dropping-controller
Oct 21, 2026
+114
−0
Merged
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
480c709
fix: ensure text/byte stream controller(s) are dropped when the strea…
1egoman 08dfcbe
fix: add tests to assert stream controllers are dropped from maps
1egoman 323677b
fix: add changeset
1egoman 27aa5b8
fix: add regression test for exact specific issue
1egoman File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| 'livekit-client': patch | ||
| --- | ||
|
|
||
| Fixes an issue where if a data stream runs into a terminal error, any packets delivered afterwards will be treated as if the stream doesn't exist (and not throw a sync error) |
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
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
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🟡 Aborted reads keep receiving chunks
When
readAll({ signal })aborts,cancelnever runs because reader cleanup only releases the lock. Both stream controllers keep accepting chunks into an unread queue until the trailer arrives.Learn more
The manager registers an incoming stream until its source
ReadableStreamis canceled or a trailer arrives. The new sourcecancelhook unregisters it when cancellation propagates through the pipe. However, TextStreamReader and ByteStreamReader only release their reader locks when an abort or premature iteration ends. Releasing a lock does not cancel the stream, so its source remains registered and continues buffering incoming packets despite the caller having stopped reading. The same omission affects both new cancellation hooks.Example: A client aborts
reader.readAll({ signal })during a large text transfer. The promise rejects, but later chunks continue to enter the text stream's unread queue until a trailer arrives; the byte reader behaves the same way.Recommended fix: On abort or early iteration exit, cancel the underlying reader before releasing its lock, and test that both text and byte controllers drop subsequent packets immediately. Preserve the existing error propagation for failed reads.
Was this helpful? React with 👍 or 👎 to provide feedback.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is outside the scope of this fix, and I will make a follow up pull request fixing this: #2168