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

From: Yukihiro Matsumoto <matz@...>
Date: 2007-09-24 14:32:22 UTC
List: ruby-dev #31843
まつもと ゆきひろです

In message "Re: [ruby-dev:31842] 拡張ライブラリ内での SIGVTALRM"
    on Mon, 24 Sep 2007 23:03:27 +0900, とみたまさひろ <tommy@tmtm.org> writes:

|Ruby でスレッドを生成すると SIGVTALRM が 10ms 毎に通知されて、それで
|Ruby スレッドのコンテキストスイッチが制御されていると思うのですが(処理
|系によるかも)、C で書かれた Ruby の拡張ライブラリに制御が移っても
|SIGVTALRM は通知され続けますよね。

はい。

|拡張ライブラリ内で SIGVTALRM があがると困るような場合は、拡張ライブラリ
|側で rb_thread_stop_timer() と rb_thread_start_timer() で処理を括るとか、
|SIGVTALRM をブロックするとかして対処しないといけないのでしょうか。

SIGVTALRMをどうしてもブロックする必要があるのであれば、そうな
ると思います。

|今までそのような認識は無かったのですが、 Solaris10 上の MySQL/Ruby 実行
|中に poll() が SIGVTALRM で EINTR になって失敗するという事象があったと
|いう連絡を受けたので、どうしたものかと…。
|
|この辺について対処しているライブラリを見たこと無いのですが、どうするの
|が正しいのでしょうか。

「正しい」は確立されていないように思います。本当はSA_RESTART
を指定するのがよいのかもしれないのですが、それはそれで過去に
問題を引き起こしたような気がしますし。

In This Thread