[#28681] ブロックパラメータと多値について — Takaaki Tateishi <ttate@...>

11 messages 2006/06/02

[#28708] 1.8.5 release schedule? — URABE Shyouhei <root@...>

というわけで今日の基調講演で8月に1.8.5が出ることになったわけですが。

105 messages 2006/06/10
[#28709] Re: 1.8.5 release schedule? — Yukihiro Matsumoto <matz@...> 2006/06/10

まつもと ゆきひろです

[#28711] Re: 1.8.5 release schedule? — URABE Shyouhei <root@...> 2006/06/11

卜部です。

[#28751] Re: 1.8.5 release schedule? — URABE Shyouhei <root@...> 2006/06/19

卜部です。

[#28752] Re: 1.8.5 release schedule? — Yukihiro Matsumoto <matz@...> 2006/06/19

まつもと ゆきひろです

[#28753] Re: 1.8.5 release schedule? — URABE Shyouhei <root@...> 2006/06/19

卜部です。

[#28754] Re: 1.8.5 release schedule? — Yukihiro Matsumoto <matz@...> 2006/06/19

まつもと ゆきひろです

[#28813] Re: 1.8.5 release schedule? — URABE Shyouhei <root@...> 2006/06/23

卜部です。

[#28818] ruby 1.8.5 preview1 (Re: Re: 1.8.5 release schedule?) — Yukihiro Matsumoto <matz@...> 2006/06/24

まつもと ゆきひろです

[#28819] Re: ruby 1.8.5 preview1 (Re: Re: 1.8.5 release schedule?) — URABE Shyouhei <root@...> 2006/06/24

卜部です。

[#28820] Re: ruby 1.8.5 preview1 (Re: Re: 1.8.5 release schedule?) — Kouhei Yanagita <yanagi@...> 2006/06/24

柳田です。

[#28821] udp test with ruby 1.8.5 preview1 on cygwin — Tanaka Akira <akr@...17n.org> 2006/06/24

In article <y7vnup05.wl%yanagi@shakenbu.org>,

[#28823] Re: udp test with ruby 1.8.5 preview1 on cygwin — Kouhei Yanagita <yanagi@...> 2006/06/24

> いちおう問題の切り分けをするために確認したいんですが、その環

[#28824] Re: udp test with ruby 1.8.5 preview1 on cygwin — Tanaka Akira <akr@...17n.org> 2006/06/24

In article <veqrun77.wl%yanagi@shakenbu.org>,

[#28825] Re: udp test with ruby 1.8.5 preview1 on cygwin — Kouhei Yanagita <yanagi@...> 2006/06/24

mswin32 版ではどうなるのだろうと思って

[#28833] Re: udp test with ruby 1.8.5 preview1 on cygwin — info@... 2006/06/24

Cygwin @ WindowsXP SP2 です。

[#28834] Re: udp test with ruby 1.8.5 preview1 on cygwin — Tanaka Akira <akr@...17n.org> 2006/06/24

In article <449D66EC.8050405@cyanet.jp>,

[#29120] Re: 1.8.5 release schedule? — "U.Nakamura" <usa@...> 2006/07/24

こんにちは、なかむら(う)です。

[#29121] Re: 1.8.5 release schedule? — Yukihiro Matsumoto <matz@...> 2006/07/24

まつもと ゆきひろです

[#29128] bugs in ruby_1_8 (Re: 1.8.5 release schedule?) — URABE Shyouhei <root@...> 2006/07/25

卜部です。

[#29133] Re: bugs in ruby_1_8 (Re: 1.8.5 release schedule?) — Yukihiro Matsumoto <matz@...> 2006/07/26

まつもと ゆきひろです

[#29144] Re: bugs in ruby_1_8 (Re: 1.8.5 release schedule?) — URABE Shyouhei <root@...> 2006/07/26

卜部です。

[#29146] Re: bugs in ruby_1_8 (Re: 1.8.5 release schedule?) — Yukihiro Matsumoto <matz@...> 2006/07/26

まつもと ゆきひろです

[#29185] 1.8.5 preview3? — URABE Shyouhei <root@...> 2006/08/04

卜部です。

[#29186] Re: 1.8.5 preview3? — Yukihiro Matsumoto <matz@...> 2006/08/04

まつもと ゆきひろです

[#29225] Re: 1.8.5 preview3? — URABE Shyouhei <root@...> 2006/08/08

卜部です。

[#29226] Re: 1.8.5 preview3? — Yukihiro Matsumoto <matz@...> 2006/08/08

まつもと ゆきひろです

[#29228] Re: 1.8.5 preview3? — Yukihiro Matsumoto <matz@...> 2006/08/08

まつもと ゆきひろです

[#29231] Re: 1.8.5 preview3? — URABE Shyouhei <root@...> 2006/08/08

卜部です。

[#28718] binding の仕様変更? or バグ? — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

15 messages 2006/06/12

[#28744] rational 1.08 — Tadayoshi Funaba <tadf@...>

ふなばです。

27 messages 2006/06/18
[#28773] Re: rational 1.08 — Shin-ichiro HARA <sinara@...> 2006/06/20

原です。

[#28830] Re: rational 1.08 — Tadayoshi Funaba <tadf@...> 2006/06/24

ふなばです。

[ruby-dev:28855] Re: ruby 1.8.5 preview1

From: Hidetoshi NAGAI <nagai@...>
Date: 2006-06-25 17:16:20 UTC
List: ruby-dev #28855
永井@知能.九工大です.

From: Yukihiro Matsumoto <matz@ruby-lang.org>
Subject: [ruby-dev:28818] ruby 1.8.5 preview1 (Re: Re: 1.8.5 release schedule?)
Date: Sat, 24 Jun 2006 12:12:32 +0900
Message-ID: <1151118741.934789.24502.nullmailer@x31.priv.netlab.jp>
> 先程、置きました。
>   ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-preview1.tar.gz

preview1 の直前に revert してしまった signal の patch ですが,
もし可能であれば,preview1 に添付のパッチをあてて
テストしてみていただけないでしょうか?
問題がなさそうなら,再適用を考えています.

Index: eval.c
===================================================================
RCS file: /var/cvs/src/ruby/eval.c,v
retrieving revision 1.616.2.175
diff -u -r1.616.2.175 eval.c
--- eval.c	23 Jun 2006 21:37:08 -0000	1.616.2.175
+++ eval.c	25 Jun 2006 16:01:13 -0000
@@ -3,7 +3,7 @@
   eval.e -
 
   $Author: nagai $
-  $Date: 2006/06/23 21:37:08 $
+  $Date: 2006/06/21 08:37:32 $
   created at: Thu Jun 10 14:22:17 JST 1993
 
   Copyright (C) 1993-2003 Yukihiro Matsumoto
@@ -1342,6 +1342,15 @@
 is_ruby_native_thread() {
     return NATIVETHREAD_EQUAL(ruby_thid, NATIVETHREAD_CURRENT());
 }
+
+# ifdef HAVE_NATIVETHREAD_KILL
+void
+ruby_native_thread_kill(sig)
+    int sig;
+{
+    NATIVETHREAD_KILL(ruby_thid, sig);
+}
+# endif
 #endif
 
 void
Index: ruby.h
===================================================================
RCS file: /var/cvs/src/ruby/ruby.h,v
retrieving revision 1.97.2.16
diff -u -r1.97.2.16 ruby.h
--- ruby.h	23 Jun 2006 21:37:10 -0000	1.97.2.16
+++ ruby.h	25 Jun 2006 16:01:14 -0000
@@ -696,6 +696,9 @@
 # define NATIVETHREAD_CURRENT() pthread_self()
 # define NATIVETHREAD_EQUAL(t1,t2) pthread_equal((t1),(t2))
 # define HAVE_NATIVETHREAD
+
+# define NATIVETHREAD_KILL(th,sig) pthread_kill((th),(sig))
+# define HAVE_NATIVETHREAD_KILL
 #elif defined(_WIN32) || defined(_WIN32_WCE)
 typedef DWORD rb_nativethread_t;
 # define NATIVETHREAD_CURRENT() GetCurrentThreadId()
@@ -703,10 +706,13 @@
 # define HAVE_NATIVETHREAD
 #endif
 #ifdef HAVE_NATIVETHREAD
-RUBY_EXTERN int is_ruby_native_thread();
+int is_ruby_native_thread _((void));
 #else
 #define is_ruby_native_thread() (1)
 #endif
+#ifdef HAVE_NATIVETHREAD_KILL
+void ruby_native_thread_kill _((int));
+#endif
 
 #if defined(__cplusplus)
 #if 0
Index: signal.c
===================================================================
RCS file: /var/cvs/src/ruby/signal.c,v
retrieving revision 1.50.2.11
diff -u -r1.50.2.11 signal.c
--- signal.c	23 Jun 2006 21:37:08 -0000	1.50.2.11
+++ signal.c	25 Jun 2006 16:01:14 -0000
@@ -3,7 +3,7 @@
   signal.c -
 
   $Author: nagai $
-  $Date: 2006/06/23 21:37:08 $
+  $Date: 2006/06/21 08:37:32 $
   created at: Tue Dec 20 10:13:44 JST 1994
 
   Copyright (C) 1993-2003 Yukihiro Matsumoto
@@ -304,6 +304,7 @@
     int safe;
 } trap_list[NSIG];
 static rb_atomic_t trap_pending_list[NSIG];
+static char rb_trap_accept_nativethreads[NSIG];
 rb_atomic_t rb_trap_pending;
 rb_atomic_t rb_trap_immediate;
 int rb_prohibit_interrupt = 1;
@@ -335,21 +336,23 @@
 {
     struct sigaction sigact, old;
 
+    rb_trap_accept_nativethreads[signum] = 0;
+
     sigact.sa_handler = handler;
     sigemptyset(&sigact.sa_mask);
     sigact.sa_flags = 0;
-#if defined(SA_RESTART)
+# if defined(SA_RESTART)
     /* All other signals but VTALRM shall restart restartable syscall
        VTALRM will cause EINTR to syscall if interrupted.
     */
     if (signum != SIGVTALRM) {
         sigact.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
     }
-#endif
-#ifdef SA_NOCLDWAIT
+# endif
+# ifdef SA_NOCLDWAIT
     if (signum == SIGCHLD && handler == SIG_IGN)
 	sigact.sa_flags |= SA_NOCLDWAIT;
-#endif
+# endif
     sigaction(signum, &sigact, &old);
     return old.sa_handler;
 }
@@ -361,9 +364,46 @@
 {
     ruby_signal(signum, handler);
 }
-#else
-#define ruby_signal(sig,handler) signal((sig),(handler))
-#endif
+
+# ifdef HAVE_NATIVETHREAD
+static sighandler_t
+ruby_nativethread_signal(signum, handler)
+    int signum;
+    sighandler_t handler;
+{
+    sighandler_t old;
+
+    old = ruby_signal(signum, handler);
+    rb_trap_accept_nativethreads[signum] = 1;
+    return old;
+}
+
+void
+posix_nativethread_signal(signum, handler)
+    int signum;
+    sighandler_t handler;
+{
+    ruby_nativethread_signal(signum, handler);
+}
+# endif
+
+#else /* !POSIX_SIGNAL */
+#define ruby_signal(sig,handler) (rb_trap_accept_nativethreads[sig] = 0, signal((sig),(handler)))
+
+# ifdef HAVE_NATIVETHREAD
+static sighandler_t
+ruby_nativethread_signal(signum, handler)
+    int signum;
+    sighandler_t handler;
+{
+    sighandler_t old;
+
+    old = signal(signum, handler);
+    rb_trap_accept_nativethreads[signum] = 1;
+    return old;
+}
+# endif
+#endif /* POSIX_SIGNAL */
 
 static void signal_exec _((int sig));
 static void
@@ -394,11 +434,36 @@
 	    break;
 	}
     }
+    else if (trap_list[sig].cmd == Qundef) {
+	rb_thread_signal_exit();
+    }
     else {
 	rb_thread_trap_eval(trap_list[sig].cmd, sig, trap_list[sig].safe);
     }
 }
 
+#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL)
+static void
+sigsend_to_ruby_thread(int sig)
+{
+# ifdef HAVE_SIGPROCMASK
+    sigset_t mask, old_mask;
+# else
+    int mask, old_mask;
+# endif
+
+# ifdef HAVE_SIGPROCMASK
+    sigfillset(&mask);
+    sigprocmask(SIG_BLOCK, &mask, &old_mask);
+# else
+    mask = sigblock(~0);
+    sigsetmask(mask);
+# endif
+
+    ruby_native_thread_kill(sig);
+}
+#endif
+
 static RETSIGTYPE sighandler _((int));
 static RETSIGTYPE
 sighandler(sig)
@@ -414,11 +479,22 @@
 	rb_bug("trap_handler: Bad signal %d", sig);
     }
 
+#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL)
+    if (!is_ruby_native_thread() && !rb_trap_accept_nativethreads[sig]) {
+        sigsend_to_ruby_thread(sig);
+        return;
+    }
+#endif
+
 #if !defined(BSD_SIGNAL) && !defined(POSIX_SIGNAL)
-    ruby_signal(sig, sighandler);
+    if (rb_trap_accept_nativethreads[sig]) {
+        ruby_nativethread_signal(sig, sighandler);
+    } else {
+        ruby_signal(sig, sighandler);
+    }
 #endif
 
-    if (ATOMIC_TEST(rb_trap_immediate)) {
+    if (trap_list[sig].cmd == 0 && ATOMIC_TEST(rb_trap_immediate)) {
 	IN_MAIN_CONTEXT(signal_exec, sig);
 	ATOMIC_SET(rb_trap_immediate, 1);
     }
@@ -434,6 +510,13 @@
 sigbus(sig)
     int sig;
 {
+#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL)
+    if (!is_ruby_native_thread() && !rb_trap_accept_nativethreads[sig]) {
+        sigsend_to_ruby_thread(sig);
+        return;
+    }
+#endif
+
     rb_bug("Bus Error");
 }
 #endif
@@ -444,6 +527,13 @@
 sigsegv(sig)
     int sig;
 {
+#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL)
+    if (!is_ruby_native_thread() && !rb_trap_accept_nativethreads[sig]) {
+        sigsend_to_ruby_thread(sig);
+        return;
+    }
+#endif
+
     rb_bug("Segmentation fault");
 }
 #endif
@@ -772,6 +862,34 @@
     }
 }
 
+#if 0
+/* 
+ *   If you write a handler which works on any native thread, 
+ *   please enable this function and use it to install the handler, 
+ *   instead of `install_sighandler()'.
+ */
+#ifdef HAVE_NATIVETHREAD
+static void
+install_nativethread_sighandler(signum, handler)
+    int signum;
+    sighandler_t handler;
+{
+    sighandler_t old;
+    int old_st;
+
+    old_st = rb_trap_accept_nativethreads[signum];
+    old = ruby_nativethread_signal(signum, handler);
+    if (old != SIG_DFL) {
+        if (old_st) {
+            ruby_nativethread_signal(signum, old);
+        } else {
+            ruby_signal(signum, old);
+        }
+    }
+}
+#endif
+#endif
+
 static void
 init_sigchld(sig)
     int sig;
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread