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);