Fix deadlock in custom adapter pipe_output causing broken pipe errors #333
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.
Custom adapters fail with broken pipe errors when processing files that generate large output (e.g., XLSX files with multiple PNGs, pivot tables, or SmartArt). The underlying binaries work correctly when invoked directly.
Root Cause
pipe_outputchains I/O sequentially: read stdout → wait for process → wait for stdin copy. When subprocess produces output faster than consuming stdin, stdout buffer fills, subprocess blocks on write, stdin copy blocks on read → deadlock → broken pipe.Changes
tokio::spawninstead of chaining withjoin_handle_to_streamproc_wait, allowing concurrent I/OSubprocess exit status remains validated via
proc_wait. Stdin copy errors are logged but not propagated (subprocess closing stdin early is expected behavior).Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.