From: WATANABE Tetsuya Date: 1998-06-24T08:05:27+09:00 Subject: [ruby-dev:3000] Re: experimental release 1.1b9_27 >>>>> "M" == Yukihiro Matsumoto writes: M> eval.cのITIMER_REALとSIGALRMの部分を削るとどうなるでしょう? その後の経過なのですが... (一日出張で reply が遅くなりました) ruby-list や ruby-dev では、他の方は起きていないようなので、 わたしのところの環境が影響しているかもしれませんね。 ruby-1.1b9_27 のソースコードに対して、eval.c を修正してみまし た。ruby-1.1b9_23 の eval.c を参考にして。これで SIGALRM と ITIMER_REAL はキャンセル? したのですが、現象は起きました。 ------------------------------ --- eval.c.org Fri Jun 19 18:32:02 1998 +++ eval.c Tue Jun 23 00:14:26 1998 @@ -6197,7 +6197,9 @@ #ifdef POSIX_SIGNAL posix_signal(SIGVTALRM, catch_timer); +#ifdef TETSU posix_signal(SIGALRM, catch_timer); +#endif #else signal(SIGVTALRM, catch_timer); signal(SIGALRM, catch_timer); @@ -6207,12 +6209,12 @@ tval.it_interval.tv_usec = 100000; tval.it_value = tval.it_interval; setitimer(ITIMER_VIRTUAL, &tval, NULL); - +#ifdef TETSU tval.it_interval.tv_sec = 2; /* unblock system calls */ tval.it_interval.tv_usec = 0; tval.it_value = tval.it_interval; setitimer(ITIMER_REAL, &tval, NULL); - +#endif init = 1; } #endif ------------------------------ このときは、stacktrace をとると、再帰的に関数を呼びだしていて、 スタックを食い潰しているみたいです(呼びだしは前回と同じに不明)。 若干違うといえば違うようです(System V の signal モデルではまっ たときのような感じですが「POSIX_SIGNAL 1」になっているし...)。 ------------------------------ #0 0x4007dc29 in __kill () #1 0x4004f5d9 in raise (sig=134887805) #2 0x808018d in sigsegv (sig=11) at signal.c:332 #3 0xbfffe764 in ?? () #4 0x400b8820 in av_ () #5 0x80c6c40 in ?? () #6 0x31 in ?? () #7 0x80c6c40 in ?? () #8 0x31 in ?? () #9 0x80c6c40 in ?? () #10 0x31 in ?? () #11 0x80c6c40 in ?? () #12 0x31 in ?? () #13 0x80c6c40 in ?? () #14 0x31 in ?? () #15 0x80c6c40 in ?? () #16 0x31 in ?? () #17 0x80c6c40 in ?? () ------------------------------ #5 以降は、同じものの繰り返しで続きます。 ruby-1.1b9_27 の前には、ruby-1.1b9_25 を使用していたのですが、 こちらでは同様の現象が起きていませんでした。eval.c を比較する と、signal()/setitimer() レベルでは同じ実装ですね。 再度 ruby-1.1b9_25 を入れ直した場合は、現象は起きていません。 ただ、スクリプトの修正とか、扱うデータによって起きるタイミン グや、現象の発生などが変化するのでちょっと変です。はじまはハー ド的なものか? とも思ったのですが、システムが違う場合(同じ Linux ではあるのですが)でも同じく発生したのでハードではなさそ うですし。 私には ruby-1.1b9_25 と ruby-1.1b9_27 の diff -ru の違いから はよくわかりませんでした。うーん? しばらく ruby-1.1b9_25 を使ってみて、現象が起きないことを確認 してから(条件により違ってきたりするので)、ruby-1.1b9_27 で再 度確かめてみます。ruby-1.1b9_25 は使用期間が長かったのですが、 現象が起きているスクリプトは最近修正したスクリプトなので。 -- WATANABE Tetsuya HP Japan e-mail tetsu@jpn.hp.com