summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--process.c8
2 files changed, 13 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 6bf41eb4a7..b6ba4f4a71 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Jun 20 22:52:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (before_exec): use sig_do_nothing instead of SIG_DFL
+ for avoiding a race.
+ * process.c (sig_do_nothing): new function.
+
Mon Jun 20 21:31:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
* thread_pthread.c (thread_timer): rename timeout_10ms to
diff --git a/process.c b/process.c
index 16ac91cb72..4595ccf7b7 100644
--- a/process.c
+++ b/process.c
@@ -984,6 +984,12 @@ static RETSIGTYPE (*saved_sigpipe_handler)(int) = 0;
# define signal(a,b) posix_signal((a),(b))
#endif
+#ifdef SIGPIPE
+static RETSIGTYPE sig_do_nothing(int sig)
+{
+}
+#endif
+
static void before_exec(void)
{
/*
@@ -999,7 +1005,7 @@ static void before_exec(void)
* child process interaction might fail. (e.g. ruby -e "system 'yes | ls'")
* [ruby-dev:12261]
*/
- saved_sigpipe_handler = signal(SIGPIPE, SIG_DFL);
+ saved_sigpipe_handler = signal(SIGPIPE, sig_do_nothing);
#endif
if (!forked_child) {