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

ruby-changes:2565

From: ko1@a...
Date: 30 Nov 2007 23:09:14 +0900
Subject: [ruby-changes:2565] matz - Ruby:r14056 (trunk): * signal.c (trap_signm): SIGVTALRM no longer used for green

matz	2007-11-30 23:08:58 +0900 (Fri, 30 Nov 2007)

  New Revision: 14056

  Modified files:
    trunk/ChangeLog
    trunk/eval.c
    trunk/include/ruby/intern.h
    trunk/signal.c

  Log:
    * signal.c (trap_signm): SIGVTALRM no longer used for green
      thread.  [ruby-talk:281318]
    
    * signal.c (ruby_sig_finalize): do not install SIG_DFL handler if
      previous handler is sighandler().

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14056&r2=14055
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/eval.c?r1=14056&r2=14055
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/signal.c?r1=14056&r2=14055
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/intern.h?r1=14056&r2=14055

Index: include/ruby/intern.h
===================================================================
--- include/ruby/intern.h	(revision 14055)
+++ include/ruby/intern.h	(revision 14056)
@@ -474,6 +474,7 @@
 #define posix_signal ruby_posix_signal
 void posix_signal(int, RETSIGTYPE (*)(int));
 #endif
+void ruby_sig_finalize(void);
 void rb_trap_exit(void);
 void rb_trap_exec(void);
 const char *ruby_signal_name(int);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 14055)
+++ ChangeLog	(revision 14056)
@@ -1,3 +1,11 @@
+Fri Nov 30 22:52:54 2007  Yukihiro Matsumoto  <matz@r...>
+
+	* signal.c (trap_signm): SIGVTALRM no longer used for green
+	  thread.  [ruby-talk:281318]
+
+	* signal.c (ruby_sig_finalize): do not install SIG_DFL handler if
+	  previous handler is sighandler().
+
 Fri Nov 30 21:02:15 2007  NARUSE, Yui  <naruse@r...>
 
 	* lib/json.rb, lib/json/add/{core.rb, rails.rb},
Index: eval.c
===================================================================
--- eval.c	(revision 14055)
+++ eval.c	(revision 14056)
@@ -143,7 +143,7 @@
 static void
 ruby_finalize_1(void)
 {
-    signal(SIGINT, SIG_DFL);
+    ruby_sig_finalize();
     GET_THREAD()->errinfo = Qnil;
     rb_gc_call_finalizer_at_exit();
 }
Index: signal.c
===================================================================
--- signal.c	(revision 14055)
+++ signal.c	(revision 14056)
@@ -783,12 +783,6 @@
 	if (sig == 0 && strcmp(s, "EXIT") != 0)
 	    rb_raise(rb_eArgError, "unsupported signal SIG%s", s);
     }
-
-#if defined(HAVE_SETITIMER)
-    if (sig == SIGVTALRM) {
-	rb_raise(rb_eArgError, "SIGVTALRM reserved for Thread; can't set handler");
-    }
-#endif
     return sig;
 }
 
@@ -993,6 +987,18 @@
 #endif
 }
 
+void
+ruby_sig_finalize()
+{
+    sighandler_t oldfunc;
+
+    oldfunc = ruby_signal(SIGINT, SIG_IGN);
+    if (oldfunc == sighandler) {
+	ruby_signal(SIGINT, SIG_DFL);
+    }
+}
+
+
 #ifdef RUBY_DEBUG_ENV
 int ruby_enable_coredump = 0;
 #endif

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

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