BUG/MINOR: external-checks: do not unblock undesired signals

The external checks code makes use of block_sigchld() and unblock_sigchld()
to ensure nobody modifies the signals list while they're being manipulated.
It happens that these functions clear the list of blocked signals, so they
can possibly have a side effect if other signals are blocked. For now no
other signal is blocked but it may very well change in the future so rather
correctly use SIG_BLOCK/SIG_UNBLOCK instead of touching unrelated signals.

This fix should be backported to 1.6 for correctness.
diff --git a/src/checks.c b/src/checks.c
index ee0295e..b925d05 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -1541,14 +1541,15 @@
 	sigset_t set;
 	sigemptyset(&set);
 	sigaddset(&set, SIGCHLD);
-	assert(sigprocmask(SIG_SETMASK, &set, NULL) == 0);
+	assert(sigprocmask(SIG_BLOCK, &set, NULL) == 0);
 }
 
 void unblock_sigchld(void)
 {
 	sigset_t set;
 	sigemptyset(&set);
-	assert(sigprocmask(SIG_SETMASK, &set, NULL) == 0);
+	sigaddset(&set, SIGCHLD);
+	assert(sigprocmask(SIG_UNBLOCK, &set, NULL) == 0);
 }
 
 /* Call with SIGCHLD blocked */