[#9445] thread.rb — m_seki@...

18 messages 2000/03/16
[#9446] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/17

[#9460] Re: thread.rb — m_seki@... 2000/03/21

[#9462] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/21

まつもと ゆきひろです

[#11281] Re: thread.rb — Masatoshi SEKI <m_seki@...> 2000/10/22

[#9498] timeout しない timeout — ARIMA Yasuhiro <fit0298@...>

有馬です。

20 messages 2000/03/26
[#9506] Re: timeout しない timeout — matz@... (Yukihiro Matsumoto) 2000/03/27

まつもと ゆきひろです

[#9509] Re: timeout しない timeout — gotoken@... (GOTO Kentaro) 2000/03/27

In message "[ruby-dev:9506] Re: timeout しない timeout"

[ruby-dev:9474] Re: [BUG] trap :symbol, cmd

From: Koji Arai <JCA02266@...>
Date: 2000-03-23 21:09:33 UTC
List: ruby-dev #9474
新井です。

>>> From: Koji Arai <JCA02266@nifty.ne.jp>
>>> Date: Sun, 12 Mar 2000 23:16:58 +0900
>>> Subject: [ruby-dev:9430] [BUG] Process.kill :symbol, pid

> 新井です。
> 
> Process.killに(シグナルとして)Symbolが渡せなくなってます。

もう一個ありました。

$ ruby -v -e 'trap(:EXIT, nil)'
ruby 1.5.3 (2000-03-17) [i586-linux]
-e:1:in `trap': invalid signal number (8741) (ArgumentError)
        from -e:1


Fri Mar 24 21:02:11 2000  Koji Arai  <JCA02266@nifty.ne.jp>

	* signal.c (trap): should treat some symbols as the signal.


Index: MANIFEST
===================================================================
RCS file: /home/cvs/ruby/MANIFEST,v
retrieving revision 1.12
diff -u -p -u -r1.12 MANIFEST
--- MANIFEST	2000/03/13 07:18:33	1.12
+++ MANIFEST	2000/03/23 21:01:45
@@ -125,7 +125,6 @@ lib/matrix.rb
 lib/mkmf.rb
 lib/monitor.rb
 lib/mutex_m.rb
-lib/net/http.rb
 lib/net/ftp.rb
 lib/net/http.rb
 lib/net/pop.rb
===================================================================
↑これはついで

Index: signal.c
===================================================================
RCS file: /home/cvs/ruby/signal.c,v
retrieving revision 1.7
diff -u -p -u -r1.7 signal.c
--- signal.c	2000/03/13 07:18:39	1.7
+++ signal.c	2000/03/23 21:02:11
@@ -429,6 +429,7 @@ trap(arg)
     RETSIGTYPE (*func)();
     VALUE command, old;
     int sig;
+    char *s;
 
     func = sighandle;
     command = arg->cmd;
@@ -466,18 +467,27 @@ trap(arg)
 	command = 0;
     }
 
-    if (TYPE(arg->sig) == T_STRING) {
-	char *s = RSTRING(arg->sig)->ptr;
+    switch (TYPE(arg->sig)) {
+      case T_FIXNUM:
+	sig = NUM2INT(arg->sig);
+	break;
+
+      case T_SYMBOL:
+	s = rb_id2name(SYM2ID(arg->sig));
+	if (!s) rb_raise(rb_eArgError, "bad signal");
+	goto str_signal;
+
+      case T_STRING:
+	s = RSTRING(arg->sig)->ptr;
 
+      str_signal:
 	if (strncmp("SIG", s, 3) == 0)
 	    s += 3;
 	sig = signm2signo(s);
 	if (sig == 0 && strcmp(s, "EXIT") != 0)
 	    rb_raise(rb_eArgError, "invalid signal SIG%s", s);
     }
-    else {
-	sig = NUM2INT(arg->sig);
-    }
+
     if (sig < 0 || sig > NSIG) {
 	rb_raise(rb_eArgError, "invalid signal number (%d)", sig);
     }

--
新井康司 (Koji Arai)

In This Thread