[#3747] constants (or class vriable?) — Wakou Aoyama <wakou@...>
青山です。
原です。
青山です。
まつもと ゆきひろです
In message <199812080034.JAA05946@picachu.netlab.co.jp>
立石です。
まつもと ゆきひろです
[#3773] pack("M")/unpack("M") — shugo@... (MAEDA Shugo)
前田です。
[#3794] port NetBSD/ alpha 1.3I — SHIROYAMA Takayuki <psi@...>
[#3826] ruby 1.1d0 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
渡辺哲也です。
ふなばです。
笠原です。
前田です。
[#3851] tkutil patch (for 1.1d0) — ttate@...
立石です。
[#3859] missing/setenv.c in 1.1d0 — Inaba Hiroto <inaba@...>
稲葉です。こんなにパッチがあると、みのがされてしまうかも。
[#3862] 1.1d0 new here document — Wakou Aoyama <wakou@...>
青山です。
まつもと ゆきひろです
青山です。
まつもと ゆきひろです
[#3873] (?: ) does not work? — shugo@... (MAEDA Shugo)
前田です。
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
前田です。
白山@Stellarです。
[#3881] I want to catch all jump — shugo@... (Shugo Maeda)
前田です。
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
[#3894] ruby 1.1d1 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
わたなべです.
[#3899] interpreter reinitialization — shugo@... (Shugo Maeda)
前田です。
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
[#3962] ruby 1.3(!) released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#3966] [BUG] exception in safe level 4 — shugo@... (Shugo Maeda)
前田です。
[#3997] [BUG] "#{}" while 1 — gotoken@... (GOTO Kentaro)
ごとけんです
まつもと ゆきひろです
[#4002] config.guess — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
笠原です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
[#4005] [BUG] ruby 1.3(98/12/24) [i686-linux] at rb_gc_mark() — Ryo HAYASAKA <hayasaka@...>
早坂@会津大学といいます。
In message "[ruby-dev:4005] [BUG] ruby 1.3(98/12/24) [i686-linux] at rb_gc_mark()"
早坂@会津大学です。
[#4015] Integer proper methods — gotoken@... (GOTO Kentaro)
ごとけんです
[#4030] module Precision — gotoken@... (GOTO Kentaro)
ごとけんです
ごとけんです
まつもと ゆきひろです
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
まつもと ゆきひろです
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
ごとけんです
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
ごとけんです
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
最近あんまり建設的でないわたし.
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
原です。
[#4032] [Req] make-symbol? — shugo@... (Shugo Maeda)
前田です。
[ruby-dev:3712] Re: [BUG?] fork(2) and read(2)
まつもと ゆきひろです
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();
}