[ruby-dev:31904] Re: 拡張ライブラリ内での SIGVTALRM

From: Yukihiro Matsumoto <matz@...>
Date: 2007-09-29 13:47:47 UTC
List: ruby-dev #31904
まつもと ゆきひろです

In message "Re: [ruby-dev:31903] Re: 拡張ライブラリ内での SIGVTALRM"
    on Sat, 29 Sep 2007 22:16:58 +0900, とみたまさひろ <tommy@tmtm.org> writes:

|> とりあえず、--enable-pthread を試してみてと伝えておきました。
|
|解決しなかったようです (--;
|
|eval.c の thread_timer() がシステムコール中に SIGVTALRM を送ることがあ
|るようで…。

うーむ。

||        if (!rb_thread_critical) {
||            rb_thread_pending = 1;
||            if (rb_trap_immediate) {                  ← (a)
||                pthread_kill(ruby_thid, SIGVTALRM);   ← (b)
||            }
||        }
|
|この辺りのコードって、何の排他制御もなしに rb_thread_critical や
|rb_trap_immediate 変数が参照されているようなんですが、問題ないんでしょ
|うか。
|
|(a) では rb_trap_immediate は 1 だったけど、(b) の時点では 0 になってい
|て、メインスレッド処理の変なところで割り込みが入るなんてことはない?

可能性はあるでしょうね。どのくらい悪影響があるのか見積もれま
せんが。

|ところで、色々試しててわかったんですが、Ruby のスレッドは、相手がいない
|パイプの open ではブロックしちゃうんですね。今まで知りませんでした。

ええ、stdioでNONBLOCKINGなopenを行う方法がわからなかったんで。
1.9だとstdioを捨てているのでブロックしません。でも、なんだか
割り込みが変だなあ。

In This Thread