[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]