Mark H Weaver writes: > Alex Vong writes: > >> I get the following error when running ``guix --version | head -n 1''. I >> can get similar after replacing ``--version'' with ``--help''. Also, the >> error is nondeterministic. Any idea? > > Attempts to write to a pipe that has already been closed on the other > end results in EPIPE. From the write(2) man page: > > EPIPE fd is connected to a pipe or socket whose reading end is closed. > When this happens the writing process will also receive a > SIGPIPE signal. (Thus, the write return value is seen only if > the program catches, blocks or ignores this signal.) > > In this case, there's a race condition. The result depends on whether > "head -n 1" closes its end of the pipe before or after "guix --version" > is finished writing all of its output. If "head -n 1" closes the pipe > first, then "guix --version" will receive EPIPE while attempting to > write to it. > > What normally happens is that the sending process receives SIGPIPE, > which simply causes it to exit prematurely without ever receiving this > error. However, since Guix arranges to ignore SIGPIPE in > 'initialize-guix' in guix/ui.scm, we receive EPIPE. > > That's what's happening here. I'll need to think on how best to fix it. > > Regards, > Mark Nice explaination as always! I forget to mention that I reported a bug of similar flavour before . I agree that thought is needed to fix all instances of this type of bug. Cheers, Alex