tee: fix hang on broken stdout pipe in -p mode and add regression test#10599
Closed
Paol0B wants to merge 8 commits intouutils:mainfrom
Closed
Conversation
ChrisDryden
reviewed
Jan 31, 2026
ChrisDryden
reviewed
Jan 31, 2026
ChrisDryden
reviewed
Jan 31, 2026
|
GNU testsuite comparison: |
…roken-Can-Hang-Forever-on-Pipes
…roken-Can-Hang-Forever-on-Pipes
Collaborator
|
Changes look great just have some linting issues |
…roken-Can-Hang-Forever-on-Pipes
…roken-Can-Hang-Forever-on-Pipes
|
GNU testsuite comparison: |
…roken-Can-Hang-Forever-on-Pipes
|
GNU testsuite comparison: |
Collaborator
|
Is it possible that this was fixed with the pipeline signal handling? I am having trouble replicating the original issue now |
Collaborator
|
I did some digging into the git history to see if I could see if the bug existed and then was already fixed and I was able to replicate it before: #9585 I believe that PR already fixed the issue |
Collaborator
|
Sorry about the extra work here, I should have validated the use case before I started reviewing this |
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.
close #10308
Fix: tee -p (Linux) ensure_stdout_not_broken Can Hang Forever on Pipes
Problem
tee -p hangs indefinitely in normal pipelines (e.g., echo "test" | tee -p file | cat) on Linux.
Root Cause
ensure_stdout_not_broken() used POLLRDBAND which doesn't work with standard Unix pipes, causing improper pipe state detection.
Solution
Changed poll flag from POLLRDBAND to POLLOUT:
Correctly detects broken pipes via POLLERR (automatically checked by poll)
Uses zero timeout (non-blocking)
Properly handles both healthy and broken pipes
Changes
signals.rs: Updated ensure_stdout_not_broken() to use POLLOUT
tee.rs: Restored pre-check with better documentation
test_tee.rs: Added regression test test_pipe_mode_normal_pipeline_no_hang