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

From: とみたまさひろ <tommy@...>
Date: 2007-09-25 15:21:26 UTC
List: ruby-dev #31859
とみたです。

On Mon, 24 Sep 2007 23:32:22 +0900
Yukihiro Matsumoto <matz@ruby-lang.org> 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 が発生するのが不
# 思議。そういうものではないのかな…。

-- 
とみたまさひろ <tommy@tmtm.org>
3469 42CC 4D32 F53C AD98  65A5 8C37 FF09 69C1 6040

In This Thread