summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--process.c23
-rw-r--r--signal.c6
2 files changed, 3 insertions, 26 deletions
diff --git a/process.c b/process.c
index 5643c09d6d..cdc9692988 100644
--- a/process.c
+++ b/process.c
@@ -1136,30 +1136,10 @@ proc_detach(VALUE obj, VALUE pid)
return rb_detach_process(NUM2PIDT(pid));
}
-#ifdef SIGPIPE
-static RETSIGTYPE (*saved_sigpipe_handler)(int) = 0;
-#endif
-
-#ifdef SIGPIPE
-static RETSIGTYPE
-sig_do_nothing(int sig)
-{
-}
-#endif
-
/* This function should be async-signal-safe. Actually it is. */
static void
before_exec_async_signal_safe(void)
{
-#ifdef SIGPIPE
- /*
- * Some OS commands don't initialize signal handler properly. Thus we have
- * to reset signal handler before exec(). Otherwise, system() and similar
- * child process interaction might fail. (e.g. ruby -e "system 'yes | ls'")
- * [ruby-dev:12261]
- */
- saved_sigpipe_handler = signal(SIGPIPE, sig_do_nothing); /* async-signal-safe */
-#endif
}
static void
@@ -1186,9 +1166,6 @@ before_exec(void)
static void
after_exec_async_signal_safe(void)
{
-#ifdef SIGPIPE
- signal(SIGPIPE, saved_sigpipe_handler); /* async-signal-safe */
-#endif
}
static void
diff --git a/signal.c b/signal.c
index 34d229a71d..9b3153d99d 100644
--- a/signal.c
+++ b/signal.c
@@ -935,7 +935,7 @@ check_reserved_signal_(const char *name, size_t name_len)
}
#endif
-#ifdef SIGSYS
+#if defined SIGPIPE || defined SIGSYS
static RETSIGTYPE
sig_do_nothing(int sig)
{
@@ -1066,7 +1066,7 @@ default_handler(int sig)
#endif
#ifdef SIGPIPE
case SIGPIPE:
- func = SIG_IGN;
+ func = sig_do_nothing;
break;
#endif
#ifdef SIGSYS
@@ -1487,7 +1487,7 @@ Init_signal(void)
#endif
}
#ifdef SIGPIPE
- install_sighandler(SIGPIPE, SIG_IGN);
+ install_sighandler(SIGPIPE, sig_do_nothing);
#endif
#ifdef SIGSYS
install_sighandler(SIGSYS, sig_do_nothing);