GNU bug report logs -
#79079
31.0.50; Piped command output is sometimes lost in Eshell
Previous Next
Full log
Message #116 received at 79079 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Attached is a patch for this with some regression tests (unfortunately,
we can only run them in an interactive session, since Emacs will
terminate itself in batch mode upon receiving a SIGPIPE). I've also
called out the change in NEWS so that users are aware.
On 7/26/2025 2:12 PM, Jim Porter wrote:
> After examining this more closely, there are three problems with the
> current Emacs code, of varying importance:
>
> 1. When we receive an EPIPE, we don't call our process-filter one last
> time (this is the original bug report). You can see this by running the
> following Eshell command repeatedly until it produces no output:
>
> git log | head -n 10 | cat
>
> 2. When we receive an EPIPE, we set the exit status to 256; that's not
> right, since the exit status should be 0. You can see this by running
> the following Eshell command until the prompt shows a non-zero status:
>
> git log | head -n 10 > #<my-buffer>
>
> 3. If the child process closes stdin and wants to keep doing some work
> (like write to stdout), it can't, since we called 'deactivate_process'.
> You can see this with the attached script by running (it's supposed to
> print the first line of "git log"):
>
> git log | ./test-script.sh
>
> I've also attached two WIP patches for the different implementations.
> "bad-call-filter.diff" uses 'read_process_output' to call our process
> filter. It only solves issue #1 above. "good-close-pipe.diff" (which I
> posted previously) solves all three issues. While the latter is a
> slightly bigger change and requires some more testing on my end to make
> sure I've covered 100% of the cases, I think it's the more-correct
> solution. If we make the bigger change, it's probably worth calling it
> out in NEWS and on emacs-devel so that people can be on the lookout for
> any edge cases I haven't identified.
[0001-Allow-child-processes-to-continue-after-EPIPE.patch (text/plain, attachment)]
This bug report was last modified 32 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.