From: "とみたまさひろ" Date: 2007-09-26T00:21:26+09:00 Subject: [ruby-dev:31859] Re: 拡張ライブラリ内での SIGVTALRM とみたです。 On Mon, 24 Sep 2007 23:32:22 +0900 Yukihiro Matsumoto wrote: > |拡張ライブラリ内で SIGVTALRM があがると困るような場合は、拡張ライブラリ > |側で rb_thread_stop_timer() と rb_thread_start_timer() で処理を括るとか、 > |SIGVTALRM をブロックするとかして対処しないといけないのでしょうか。 > > SIGVTALRMをどうしてもブロックする必要があるのであれば、そうな > ると思います。 了解です。Ruby のリコンパイルができる状況であれば、configure --enable-pthread でも解決しますよね。おそらく。 > |今までそのような認識は無かったのですが、 Solaris10 上の MySQL/Ruby 実行 > |中に poll() が SIGVTALRM で EINTR になって失敗するという事象があったと > |いう連絡を受けたので、どうしたものかと…。 > | > |この辺について対処しているライブラリを見たこと無いのですが、どうするの > |が正しいのでしょうか。 > > 「正しい」は確立されていないように思います。本当はSA_RESTART > を指定するのがよいのかもしれないのですが、それはそれで過去に > 問題を引き起こしたような気がしますし。 とりあえず、--enable-pthread を試してみてと伝えておきました。 Solaris では、かなり前([ruby-dev:17878])にも同じような問題が起きたこと があるので、常に --enable-pthread しといた方が無難なのかもしれません。 # setitimer(ITIMER_VIRTUAL) はユーザー空間での CPU 時間がカウントされる # ものだと思っていたので、システムコール中に SIGVTALRM が発生するのが不 # 思議。そういうものではないのかな…。 -- とみたまさひろ 3469 42CC 4D32 F53C AD98 65A5 8C37 FF09 69C1 6040