GNU bug report logs - #29826
nondeterministic Broken pipe

Previous Next

Package: guix;

Reported by: Alex Vong <alexvong1995 <at> gmail.com>

Date: Sat, 23 Dec 2017 20:25:01 UTC

Severity: normal

Merged with 34209

Done: Simon Tournier <zimon.toutoune <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


Message #29 received at 29826 <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: Mark H Weaver <mhw <at> netris.org>
Cc: Alex Vong <alexvong1995 <at> gmail.com>, 29826 <at> debbugs.gnu.org
Subject: Re: bug#29826: nondeterministic Broken pipe
Date: Tue, 02 Jan 2018 23:17:08 +0100
Hello,

Mark H Weaver <mhw <at> netris.org> skribis:

> ludo <at> gnu.org (Ludovic Courtès) writes:

[...]

>> Not sure!  We specifically ignore EPIPE in cases where it matters, such
>> as for the output of ‘guix package --search’, ‘guix package -A’, etc.
>> In other cases, it’s probably an error, so it’s worth reporting.
>>
>> WDYT?
>
> I see from the comment in (guix ui) where SIGPIPE is ignored, the
> rationale:
>
>   ;; Ignore SIGPIPE.  If the daemon closes the connection, we prefer to be
>   ;; notified via an EPIPE later.
>   (sigaction SIGPIPE SIG_IGN)
>
> Instead of unconditionally ignoring SIGPIPE here in (initialize-guix),
> it might be better to ignore SIGPIPE only if we open a connection to the
> daemon with the intent of mutating the store, and perhaps in some other
> cases where we're mutating information on disk (e.g. switching
> generations).  In those cases, we have a job to do that should ideally
> be completed regardless of whether anyone is still listening to our
> STDOUT.
>
> However, in many other cases, we don't mutate anything on disk, and our
> *only* job is printing information to the user, e.g. when showing
> version/usage information, the list of available packages, the list of
> generations, etc.  In those cases, I think it would be better to let
> SIGPIPE kill us, because there is no reason to keep the 'guix' process
> alive if its output is going nowhere.  These are also the cases where
> it's most useful to pipe 'guix' output into other commands.
>
> So, I think we should consider removing (sigaction SIGPIPE SIG_IGN) from
> (initialize-guix), and instead putting it in various other selected
> places.
>
> What do you think?

Why not.  An option would be to move (sigaction SIGPIPE SIG_IGN) to
‘open-connection’, though that’s not following “library design best
practices.”

If we do that, can we really remove the ‘leave-on-EPIPE’ uses that we
have in (guix scripts package) for instance?  At first sight they are in
‘process-query’, which corresponds to operations that don’t rely on the
store, so that should be safe.

There are a few other uses of ‘leave-on-EPIPE’ that happen while the
store is opened (in ‘guix size’, ‘guix challenge’).  We’d have to keep
these.

Thoughts?

Ludo’.




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.