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

ruby-changes:19538

From: nagachika <ko1@a...>
Date: Sun, 15 May 2011 22:46:49 +0900 (JST)
Subject: [ruby-changes:19538] nagachika:r31579 (trunk): * signal.c (rb_f_kill): accept '-SIGXXX' style signal with Symbol or

nagachika	2011-05-15 22:37:47 +0900 (Sun, 15 May 2011)

  New Revision: 31579

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

  Log:
    * signal.c (rb_f_kill): accept '-SIGXXX' style signal with Symbol or
      implicit convertion with #to_str. [ruby-dev:43169] fixes #4362
    * test/ruby/test_signal.rb (test_signal_process_group): add a test
      for send signal to process group.

  Modified files:
    trunk/ChangeLog
    trunk/signal.c
    trunk/test/ruby/test_signal.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 31578)
+++ ChangeLog	(revision 31579)
@@ -1,3 +1,10 @@
+Sun May 15 22:26:39 2011  CHIKANAGA Tomoyuki  <nagachika00@g...>
+
+	* signal.c (rb_f_kill): accept '-SIGXXX' style signal with Symbol or
+	  implicit convertion with #to_str. [ruby-dev:43169] fixes #4362
+	* test/ruby/test_signal.rb (test_signal_process_group): add a test
+	  for send signal to process group.
+
 Sun May 15 21:22:35 2011  CHIKANAGA Tomoyuki  <nagachika00@g...>
 
 	* cont.c (cont_init): clear macihne_stack_start/end of saved thread to
Index: test/ruby/test_signal.rb
===================================================================
--- test/ruby/test_signal.rb	(revision 31578)
+++ test/ruby/test_signal.rb	(revision 31579)
@@ -36,6 +36,18 @@
     end
   end
 
+  def test_signal_process_group
+    return unless Process.respond_to?(:kill)
+    bug4362 = '[ruby-dev:43169]'
+    assert_nothing_raised(bug4362) do
+      pid = Process.spawn(EnvUtil.rubybin, '-e', '"sleep 10"', :pgroup => true)
+      Process.kill(:"-TERM", pid)
+      Process.waitpid(pid)
+      assert_equal(true, $?.signaled?)
+      assert_equal(Signal.list["TERM"], $?.termsig)
+    end
+  end
+
   def test_exit_action
     return unless have_fork?	# skip this test
     begin
Index: signal.c
===================================================================
--- signal.c	(revision 31578)
+++ signal.c	(revision 31579)
@@ -359,6 +359,7 @@
     int negative = 0;
     int sig;
     int i;
+    volatile VALUE str;
     const char *s;
 
     rb_secure(2);
@@ -376,11 +377,11 @@
 
       case T_STRING:
 	s = RSTRING_PTR(argv[0]);
+      str_signal:
 	if (s[0] == '-') {
 	    negative++;
 	    s++;
 	}
-      str_signal:
 	if (strncmp("SIG", s, 3) == 0)
 	    s += 3;
 	if((sig = signm2signo(s)) == 0)
@@ -391,17 +392,13 @@
 	break;
 
       default:
-        {
-	    VALUE str;
-
-	    str = rb_check_string_type(argv[0]);
-	    if (!NIL_P(str)) {
-		s = RSTRING_PTR(str);
-		goto str_signal;
-	    }
-	    rb_raise(rb_eArgError, "bad signal type %s",
-		     rb_obj_classname(argv[0]));
+	str = rb_check_string_type(argv[0]);
+	if (!NIL_P(str)) {
+	    s = RSTRING_PTR(str);
+	    goto str_signal;
 	}
+	rb_raise(rb_eArgError, "bad signal type %s",
+		 rb_obj_classname(argv[0]));
 	break;
     }
 

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

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