Stop storing block_io in job_t

Prior to this fix, a job would hold onto any IO redirections from its
parent. For example:

    begin
        echo a
    end < file.txt

The "echo a" job would hold a reference to the I/O redirection.
The problem is that jobs then extend the life of pipes until the job is
cleaned up. This can prevent pipes from closing, leading to hangs.

Fix this by not storing the block IO; this ensures that jobs do not
prolong the life of pipes.

Fixes #6397
This commit is contained in:
ridiculousfish
2019-12-11 16:34:20 -08:00
parent 16dc606001
commit c0b3be9fb4
6 changed files with 52 additions and 48 deletions

View File

@@ -0,0 +1,17 @@
#RUN: %fish %s
# See #6397
function f --on-signal USR1
begin
echo a
echo b
end | while read -l line
echo $line
end
end
kill -USR1 $fish_pid
#CHECK: a
#CHECK: b