[#3747] constants (or class vriable?) — Wakou Aoyama <wakou@...>

青山です。

20 messages 1998/12/06
[#3751] Re: constants (or class vriable?) — Shin-ichro Hara <sinara@...> 1998/12/07

原です。

[#3763] Re: constants (or class vriable?) — Wakou Aoyama <wakou@...> 1998/12/07

青山です。

[#3764] Re: constants (or class vriable?) — matz@... (Yukihiro Matsumoto) 1998/12/08

まつもと ゆきひろです

[#3767] Re: constants (or class vriable?) — kjana@... (YANAGAWA Kazuhisa) 1998/12/08

In message <199812080034.JAA05946@picachu.netlab.co.jp>

[#3826] ruby 1.1d0 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 1998/12/16

[#3873] (?: ) does not work? — shugo@... (MAEDA Shugo)

前田です。

15 messages 1998/12/19

[#3881] I want to catch all jump — shugo@... (Shugo Maeda)

前田です。

17 messages 1998/12/21
[#3895] Re: I want to catch all jump — matz@... (Yukihiro Matsumoto) 1998/12/22

まつもと ゆきひろです

[#3894] ruby 1.1d1 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1998/12/22

[#3899] interpreter reinitialization — shugo@... (Shugo Maeda)

前田です。

22 messages 1998/12/22
[#3923] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/23

まつもと ゆきひろです

[#3926] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/23

前田です。

[#3931] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#3956] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/24

前田です。

[#3960] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#4002] config.guess — Koji Arai <JCA02266@...>

新井です。

24 messages 1998/12/26
[#4039] Re: config.guess — matz@... (Yukihiro Matsumoto) 1998/12/29

まつもと ゆきひろです

[#4045] Re: config.guess — Koji Arai <JCA02266@...> 1998/12/31

新井です。

[#4047] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/01

まつもと ゆきひろです

[#4048] Re: config.guess — Koji Arai <JCA02266@...> 1999/01/01

新井です。

[#4049] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/02

まつもと ゆきひろです

[#4050] Re: config.guess — Motoyuki Kasahara <m-kasahr@...> 1999/01/04

笠原です。

[#4030] module Precision — gotoken@... (GOTO Kentaro)

ごとけんです

78 messages 1998/12/28
[#4310] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4311] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/21

まつもと ゆきひろです

[#4312] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4317] Re: module Precision — keiju@... (石塚圭樹 ) 1999/01/21

けいじゅ@日本ラショナルソフトウェアです.

[#4364] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/25

ごとけんです

[#4478] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/28

まつもと ゆきひろです

[#4506] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/30

ごとけんです

[#4552] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/01

まつもと ゆきひろです

[#4557] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/01

ごとけんです

[#4632] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4647] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/03

けいじゅ@日本ラショナルソフトウェアです.

[#4648] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4633] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/03

まつもと ゆきひろです

[#4636] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4836] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4843] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/08

けいじゅ@日本ラショナルソフトウェアです.

[#4849] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4924] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/09

けいじゅ@日本ラショナルソフトウェアです.

[#4976] a genericity — gotoken@... (GOTO Kentaro) 1999/02/10

ごとけんです

[#5008] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/11

けいじゅ@日本ラショナルソフトウェアです.

[#5018] Re: a genericity — gotoken@... (GOTO Kentaro) 1999/02/11

ごとけんです

[#5171] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/16

けいじゅ@日本ラショナルソフトウェアです.

[ruby-dev:3712] Re: [BUG?] fork(2) and read(2)

From: matz@... (Yukihiro Matsumoto)
Date: 1998-12-01 03:00:36 UTC
List: ruby-dev #3712
まつもと ゆきひろです

In message "[ruby-dev:3701] [BUG?] fork(2) and read(2)"
    on 98/11/30, WATANABE Tetsuya <tetsu@jpn.hp.com> writes:

|strace(1) などのツールを使って確認してみたところ、fork(2) 
|後 setitimer(2) でインターバルタイマの初期化が行われ、シグ
|ナルハンドラが設定されていないため中断していることがわかる。
|
|process.c を確認したら、Linux のシステムだけが 
|setitimer(2) (after_exec())していることに気がつきパッチを
|作成。

なるほど,「どうしてlinuxを特別扱いしてたかな」と考えて記憶
をたどるのですが,どうやら以前「linuxではsetitimerの状態が
fork後のプロセスに継承されない」現象に悩まされた時に追加した
のを思い出しました.

それはそれで良かったんですが,問題はその後効率のため「最初の
スレッドが生成されるまでシグナルハンドラを設定しない」ように
変更してしまったことにあります.結果,スレッドを使わずforkを
使うプログラムではSIGVTARLMで落っこちることになってしまって
いました.

いまだにlinuxでitimerを継承しないかどうかは確認していないの
ですが,この問題には対処する必要があるので,以下のパッチを提
案します.試してみて下さい.

|p.s. E-mail がたくさんたまっている月曜日は大変ですね。
|     まつもとさん。

いやあ,そうなんですよ.先週の金曜から読んでませんでしたから
すっごい溜ってました.さらにIPAの書類書きなんて仕事もあった
りして….
                                まつもと ゆきひろ /:|)

--- intern.h	1998/11/26 08:25:44	1.1.1.1.2.27
+++ intern.h	1998/12/01 02:53:02
@@ -126,2 +126,4 @@
 void gc_mark_threads _((void));
+void thread_start_timer _((void));
+void thread_stop_timer _((void));
 void thread_schedule _((void));
--- process.c	1998/10/06 02:45:00	1.1.1.2.2.16
+++ process.c	1998/12/01 02:50:10
@@ -215,23 +215,4 @@
 #if defined(THREAD) && defined(HAVE_SETITIMER)
-static void
-before_exec()
-{
-    struct itimerval tval;
-
-    tval.it_interval.tv_sec = 0;
-    tval.it_interval.tv_usec = 0;
-    tval.it_value = tval.it_interval;
-    setitimer(ITIMER_VIRTUAL, &tval, NULL);
-}
-
-static void
-after_exec()
-{
-    struct itimerval tval;
-
-    tval.it_interval.tv_sec = 0;
-    tval.it_interval.tv_usec = 100000;
-    tval.it_value = tval.it_interval;
-    setitimer(ITIMER_VIRTUAL, &tval, NULL);
-}
+#define before_exec() thread_stop_timer()
+#define after_exec() thread_start_timer()
 #else
@@ -505,2 +486,5 @@
 
+    if (argc == 0) {
+	ArgError("wrong # of arguments");
+    }
     if (TYPE(argv[0]) == T_ARRAY) {
--- eval.c	1998/11/17 09:12:30	1.1.1.2.2.82
+++ eval.c	1998/12/01 02:52:38
@@ -6258,2 +6258,30 @@
 
+#if defined(HAVE_SETITIMER) && !defined(__BOW__)
+static int thread_init = 0;
+
+void
+thread_start_timer()
+{
+    struct itimerval tval;
+
+    if (!thread_init) return;
+    tval.it_interval.tv_sec = 0;
+    tval.it_interval.tv_usec = 100000;
+    tval.it_value = tval.it_interval;
+    setitimer(ITIMER_VIRTUAL, &tval, NULL);
+}
+
+void
+thread_stop_timer()
+{
+    struct itimerval tval;
+
+    if (!thread_init) return;
+    tval.it_interval.tv_sec = 0;
+    tval.it_interval.tv_usec = 0;
+    tval.it_value = tval.it_interval;
+    setitimer(ITIMER_VIRTUAL, &tval, NULL);
+}
+#endif
+
 VALUE
@@ -6269,7 +6297,3 @@
 #if defined(HAVE_SETITIMER) && !defined(__BOW__)
-    static init = 0;
-
-    if (!init) {
-	struct itimerval tval;
-
+    if (!thread_init) {
 #ifdef POSIX_SIGNAL
@@ -6282,7 +6306,4 @@
 
-	tval.it_interval.tv_sec = 0;
-	tval.it_interval.tv_usec = 100000;
-	tval.it_value = tval.it_interval;
-	setitimer(ITIMER_VIRTUAL, &tval, NULL);
-	init = 1;
+	thread_init = 1;
+	thread_start_timer();
     }

In This Thread