summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-10 11:27:43 +0000
committerngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-10 11:27:43 +0000
commit4d23a784f5b001450715ef1d44ae2ef9fd06902b (patch)
treea5c39718c3dfb256617862ee86ea02b8b293b2b5
parentd8f628e582cb81c212979b186638ce69f1bd953e (diff)
* process.c (rb_f_exec): rb_exec_without_timer_thread should be
used on every OS, not only on Mac OS X or Haiku, to prevent timer thread communications using file descriptor 3 after setting redirection of the fd 3 before calling exec. [Bug #11336] [ruby-core:69886] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--process.c10
2 files changed, 8 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index f7b8580..9b7683e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Fri Jul 10 20:13:05 2015 Naohisa Goto <ngotogenome@gmail.com>
+
+ * process.c (rb_f_exec): rb_exec_without_timer_thread should be
+ used on every OS, not only on Mac OS X or Haiku, to prevent
+ timer thread communications using file descriptor 3 after
+ setting redirection of the fd 3 before calling exec.
+ [Bug #11336] [ruby-core:69886]
+
Fri Jul 10 17:41:54 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* dir.c (is_case_sensitive): get attributes by the file descriptor
diff --git a/process.c b/process.c
index 951693f..12eb624 100644
--- a/process.c
+++ b/process.c
@@ -2473,9 +2473,7 @@ rb_execarg_parent_end(VALUE execarg_obj)
RB_GC_GUARD(execarg_obj);
}
-#if defined(__APPLE__) || defined(__HAIKU__)
static int rb_exec_without_timer_thread(const struct rb_execarg *eargp, char *errmsg, size_t errmsg_buflen);
-#endif
/*
* call-seq:
@@ -2563,13 +2561,7 @@ rb_f_exec(int argc, const VALUE *argv)
rb_execarg_parent_start(execarg_obj);
fail_str = eargp->use_shell ? eargp->invoke.sh.shell_script : eargp->invoke.cmd.command_name;
-#if defined(__APPLE__) || defined(__HAIKU__)
rb_exec_without_timer_thread(eargp, errmsg, sizeof(errmsg));
-#else
- before_exec_async_signal_safe(); /* async-signal-safe */
- rb_exec_async_signal_safe(eargp, errmsg, sizeof(errmsg));
- preserving_errno(after_exec_async_signal_safe()); /* async-signal-safe */
-#endif
RB_GC_GUARD(execarg_obj);
if (errmsg[0])
rb_sys_fail(errmsg);
@@ -3077,7 +3069,6 @@ failure:
return -1;
}
-#if defined(__APPLE__) || defined(__HAIKU__)
static int
rb_exec_without_timer_thread(const struct rb_execarg *eargp, char *errmsg, size_t errmsg_buflen)
{
@@ -3087,7 +3078,6 @@ rb_exec_without_timer_thread(const struct rb_execarg *eargp, char *errmsg, size_
preserving_errno(after_exec()); /* not async-signal-safe because it calls rb_thread_start_timer_thread. */
return ret;
}
-#endif
#ifdef HAVE_WORKING_FORK
/* This function should be async-signal-safe. Hopefully it is. */