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

ruby-changes:24151

From: akr <ko1@a...>
Date: Sat, 23 Jun 2012 23:23:04 +0900 (JST)
Subject: [ruby-changes:24151] akr:r36202 (trunk): * internal.h (rb_execarg): add new_pgroup_given and new_pgroup_flag

akr	2012-06-23 23:21:47 +0900 (Sat, 23 Jun 2012)

  New Revision: 36202

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36202

  Log:
    * internal.h (rb_execarg): add new_pgroup_given and new_pgroup_flag
      fields.
    
    * process.c (EXEC_OPTION_NEW_PGROUP): removed.
      (proc_spawn_cmd): take a struct rb_execarg argument.
      use the new fields.
      (rb_execarg_addopt): use the new fields.
      (rb_spawn_process): follow the proc_spawn_cmd change.

  Modified files:
    trunk/ChangeLog
    trunk/internal.h
    trunk/process.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 36201)
+++ ChangeLog	(revision 36202)
@@ -1,3 +1,14 @@
+Sat Jun 23 23:19:31 2012  Tanaka Akira  <akr@f...>
+
+	* internal.h (rb_execarg): add new_pgroup_given and new_pgroup_flag
+	  fields.
+
+	* process.c (EXEC_OPTION_NEW_PGROUP): removed.
+	  (proc_spawn_cmd): take a struct rb_execarg argument.
+	  use the new fields.
+	  (rb_execarg_addopt): use the new fields.
+	  (rb_spawn_process): follow the proc_spawn_cmd change.
+	  
 Sat Jun 23 20:26:36 2012  Tanaka Akira  <akr@f...>
 
 	* internal.h (rb_execarg): add fd_dup2, fd_close, fd_open,
Index: process.c
===================================================================
--- process.c	(revision 36201)
+++ process.c	(revision 36202)
@@ -1253,10 +1253,6 @@
     return ret;
 }
 
-enum {
-    EXEC_OPTION_NEW_PGROUP
-};
-
 static void
 mark_exec_arg(void *ptr)
 {
@@ -1345,14 +1341,15 @@
 #endif
 
 static rb_pid_t
-proc_spawn_cmd(char **argv, VALUE prog, VALUE options)
+proc_spawn_cmd(char **argv, VALUE prog, struct rb_execarg *eargp)
 {
+    VALUE options = eargp->options;
     rb_pid_t pid = -1;
 
     if (argv[0]) {
 #if defined(_WIN32)
 	DWORD flags = 0;
-	if (RTEST(rb_ary_entry(options, EXEC_OPTION_NEW_PGROUP))) {
+	if (eargp->new_pgroup_given && eargp->new_pgroup_flag) {
 	    flags = CREATE_NEW_PROCESS_GROUP;
 	}
 	pid = rb_w32_aspawn_flags(P_NOWAIT, prog ? RSTRING_PTR(prog) : 0, argv, flags);
@@ -1579,11 +1576,11 @@
 #endif
 #ifdef _WIN32
         if (id == rb_intern("new_pgroup")) {
-            if (!NIL_P(rb_ary_entry(options, EXEC_OPTION_NEW_PGROUP))) {
+            if (eargp->new_pgroup_given) {
                 rb_raise(rb_eArgError, "new_pgroup option specified twice");
             }
-            val = RTEST(val) ? Qtrue : Qfalse;
-            rb_ary_store(options, EXEC_OPTION_NEW_PGROUP, val);
+            eargp->new_pgroup_given = 1;
+            eargp->new_pgroup_flag = RTEST(val) ? 1 : 0;
         }
         else
 #endif
@@ -3525,7 +3522,7 @@
     }
     else {
         char **argv = ARGVSTR2ARGV(eargp->invoke.cmd.argv_str);
-	pid = proc_spawn_cmd(argv, prog, eargp->options);
+	pid = proc_spawn_cmd(argv, prog, eargp);
     }
 #  if defined(_WIN32)
     if (pid == -1)
Index: internal.h
===================================================================
--- internal.h	(revision 36201)
+++ internal.h	(revision 36202)
@@ -183,6 +183,8 @@
     unsigned close_others_given : 1;
     unsigned close_others_do : 1;
     unsigned chdir_given : 1;
+    unsigned new_pgroup_given : 1;
+    unsigned new_pgroup_flag : 1;
     pid_t pgroup_pgid; /* asis(-1), new pgroup(0), specified pgroup (0<V). */
     VALUE rlimit_limits; /* Qfalse or [[rtype, softlim, hardlim], ...] */
     mode_t umask_mask;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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