Suppress ExecutionContext flow in BeginErrorReadLine#1498
Open
ericstj wants to merge 1 commit intomodelcontextprotocol:mainfrom
Open
Suppress ExecutionContext flow in BeginErrorReadLine#1498ericstj wants to merge 1 commit intomodelcontextprotocol:mainfrom
ericstj wants to merge 1 commit intomodelcontextprotocol:mainfrom
Conversation
Process.BeginErrorReadLine() captures the caller's ExecutionContext, causing AsyncLocal values to leak to the background stderr reader thread. This is undesirable—the stderr handler is a long-lived background I/O callback that shouldn't inherit ambient state from whichever call site happened to create the transport. Wrap BeginErrorReadLine() in ExecutionContext.SuppressFlow() so the stderr reader gets a clean context. Add a test that sets an AsyncLocal before creating the transport and verifies the stderr callback does NOT see the value. Co-authored-by: Copilot <[email protected]>
stephentoub
approved these changes
Apr 3, 2026
Contributor
|
This is reasonable hygiene, but I'm curious if this is solving some problem you found in the tests? |
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.
Process.BeginErrorReadLine() captures the caller's ExecutionContext, causing AsyncLocal values to leak to the background stderr reader thread. This is undesirable—the stderr handler is a long-lived background I/O callback that shouldn't inherit ambient state from whichever call site happened to create the transport.
Wrap BeginErrorReadLine() in ExecutionContext.SuppressFlow() so the stderr reader gets a clean context.
Add a test that sets an AsyncLocal before creating the transport and verifies the stderr callback does NOT see the value.