Subject: bug#79079: 31.0.50; Piped command output is sometimes lost in Eshell

From: Paul Eggert <[email-masked]>
Date: Thu, 24 Jul 2025 06:52:39 -0700

On 2025-07-23 22:34, Eli Zaretskii wrote:
>> Date: Wed, 23 Jul 2025 11:06:24 -0700
>> From: Jim Porter<[email-masked]>

>> In process.c,
>> when we write to a process, we handle EPIPE errors by calling
>> 'deactivate_process'. However, that can lead to us dropping any data
>> written*by* that process, since we don't call the process's filter
>> function for any remaining output still in our internal buffer.
>>
>> I think in this case, we'd just want to let the rest of our code handle
>> deactivating the process in the usual way. That helps fix this bug, plus
>> I think it makes sense in general. If a process closes stdin, I believe
>> we'd get the EPIPE error, but that process might want to continue
>> working (though it does mean that you could only interact with that
>> process via signaling it).

Yes, that makes sense.

> What about calling the filter with the data we still have?  Isn't that
> what a Posix shell would do -- flush any buffers?

Not sure what you man by that, but I suspect it wouldn't handle the 
scenario Jim describes, where the other process closes its end of the 
pipe but keeps running. Emacs shouldn't assume that EPIPE means the 
other process has died or has closed any pipes other than the one Emacs 
got EPIPE on.