ruby-changes:39128
From: ngoto <ko1@a...>
Date: Fri, 10 Jul 2015 20:28:06 +0900 (JST)
Subject: [ruby-changes:39128] ngoto:r51209 (trunk): * process.c (rb_f_exec): rb_exec_without_timer_thread should be
ngoto 2015-07-10 20:27:43 +0900 (Fri, 10 Jul 2015) New Revision: 51209 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51209 Log: * 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] Modified files: trunk/ChangeLog trunk/process.c Index: ChangeLog =================================================================== --- ChangeLog (revision 51208) +++ ChangeLog (revision 51209) @@ -1,3 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Fri Jul 10 20:13:05 2015 Naohisa Goto <ngotogenome@g...> + + * 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@r...> * dir.c (is_case_sensitive): get attributes by the file descriptor Index: process.c =================================================================== --- process.c (revision 51208) +++ process.c (revision 51209) @@ -2473,9 +2473,7 @@ rb_execarg_parent_end(VALUE execarg_obj) https://github.com/ruby/ruby/blob/trunk/process.c#L2473 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) https://github.com/ruby/ruby/blob/trunk/process.c#L2561 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: https://github.com/ruby/ruby/blob/trunk/process.c#L3069 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 struc https://github.com/ruby/ruby/blob/trunk/process.c#L3078 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. */ -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/