File pacemaker-services-sigpipe-default.patch of Package pacemaker.9287
commit e3aa0b293611b41713a343e0b4f19160fd8d6bc7
Author: David Vossel <dvossel@redhat.com>
Date: Mon Aug 11 14:12:41 2014 -0500
Low: services: restore SIGPIPE default behavior for child processes
Commands in OCF scripts behave slightly differently when SIGPIPE
is ignored versus when SIGPIPE is handled by the default behavior.
It is best to launch OCF scripts without SIGPIPE being ignored
by the environment, and let the scripts themselves handle SIGPIPE
however they want.
diff --git a/lib/services/services_linux.c b/lib/services/services_linux.c
index ec5c328..dd7bb64 100644
--- a/lib/services/services_linux.c
+++ b/lib/services/services_linux.c
@@ -435,6 +435,14 @@ services_os_action_execute(svc_action_t * op, gboolean synchronous)
return FALSE;
}
case 0: /* Child */
+
+ /* SIGPIPE is ignored (which is different from signal blocking) by the gnutls library.
+ * Depending on the libqb version in use, libqb may set SIGPIPE to be ignored as well.
+ * We do not want this to be inherited by the child process. By resetting this the signal
+ * to the default behavior, we avoid some potential odd problems that occur during OCF
+ * scripts when SIGPIPE is ignored by the environment. */
+ signal(SIGPIPE, SIG_DFL);
+
#if defined(HAVE_SCHED_SETSCHEDULER)
if (sched_getscheduler(0) != SCHED_OTHER) {
struct sched_param sp;