From: Ian Jackson Date: Mon, 17 Oct 2016 16:24:18 +0000 (+0100) Subject: Detect SIGPIPE (and SIGCHLD) being blocked or ignored. Closes:#841085. X-Git-Tag: debian/2.2~1 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=ef933efbf46dce39eafd0a4bda51a180ed0c541e Detect SIGPIPE (and SIGCHLD) being blocked or ignored. Closes:#841085. In fact, it seems in my test that Perl resets SIGCHLD itself, printing something to stderr, so that trip does not actually fire. But it makes sense to keep it. Signed-off-by: Ian Jackson --- diff --git a/debian/changelog b/debian/changelog index d8827a47..203a864c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,7 +2,8 @@ dgit (2.2) unstable; urgency=low * Fix config relating to Debian to actually make split brain mode work. Closes:#841085. - * + * Detect SIGPIPE (and SIGCHLD) being blocked or ignored. + Closes:#841085. -- diff --git a/dgit b/dgit index 60ab9a6c..53f47136 100755 --- a/dgit +++ b/dgit @@ -5222,6 +5222,30 @@ sub parseopts () { } } +sub check_env_sanity () { + my $blocked = new POSIX::SigSet; + sigprocmask SIG_UNBLOCK, $blocked, $blocked or die $!; + + eval { + foreach my $name (qw(PIPE CHLD)) { + my $signame = "SIG$name"; + my $signum = eval "POSIX::$signame" // die; + ($SIG{$name} // 'DEFAULT') eq 'DEFAULT' or + die "$signame is set to something other than SIG_DFL\n"; + $blocked->ismember($signum) and + die "$signame is blocked\n"; + } + }; + return unless $@; + chomp $@; + fail < 1;