[#45703] test_advise failure on GNU/Linux — Tanaka Akira <tanaka.akira@...>

今朝、気がついたのですが、手元で test_advise が失敗します。

11 messages 2012/06/05
[#45705] Re: test_advise failure on GNU/Linux — KOSAKI Motohiro <kosaki.motohiro@...> 2012/06/06

小崎です

[#45735] [ruby-trunk - Feature #6587][Open] proposal: adding new methods File.rootname and Pathname#rootname — "usa (Usaku NAKAMURA)" <usa@...>

14 messages 2012/06/14

[#45745] Re: [ruby-changes:24028] yugui:r36079 (trunk): Embedding CRuby interpreter without internal headers has been difficult — SASADA Koichi <ko1@...>

見逃していました.

19 messages 2012/06/14
[#45747] Re: [ruby-changes:24028] yugui:r36079 (trunk): Embedding CRuby interpreter without internal headers has been difficult — Yugui <yugui@...> 2012/06/15

2012/6/15 SASADA Koichi <ko1@atdot.net>:

[#45748] Re: [ruby-changes:24028] yugui:r36079 (trunk): Embedding CRuby interpreter without internal headers has been difficult — SASADA Koichi <ko1@...> 2012/06/15

 ささだです.

[#45794] :new_pgroup and :pgroup option for spawn. — Tanaka Akira <akr@...>

process.c で気がついたのですが、spawn に Windows 用の :new_pgroup というオプションが

12 messages 2012/06/23
[#45800] Re: :new_pgroup and :pgroup option for spawn. — "U.Nakamura" <usa@...> 2012/06/25

こんにちは、なかむら(う)です。

[#45818] [ruby-trunk - Feature #6643][Open] io.seek(off, :end) — "akr (Akira Tanaka)" <akr@...>

30 messages 2012/06/25

[ruby-dev:45841] Re: 非同期割り込みに対する対処案(日本語版)

From: Tanaka Akira <akr@...>
Date: 2012-06-25 20:07:32 UTC
List: ruby-dev #45841
2012年6月26日 3:40 SASADA Koichi <ko1@atdot.net>:

>  (a) Thread.interrupt_mask(exception, state) do; end
>  (b) Thread.interrupt_mask(hash) do; end
>
> state は
>
>  :immediate_interruptible
>  :blocking_interruptible
>  :uninterruptible
>
> の 3 つのシンボルが指定できるとします.それぞれ,モード 0, 1, 2 にあたる
> と考えます.

名前ですが、Thread.interruptable_at(:blocking) とかはどうかなぁ。

>  このとき,デフォルトは互換性 100% の方針ということで,全ての例外が
> immediate_interruptible だとします.
>
>  begin
>    # 何か処理
>  ensure
>    # リソース解放処理
>  end
>
> という,よくありそうな処理があったとき,リソース解放処理はなるべくなら解
> 放されたくない,ただし,^C,もしくは SIGTERM などのシグナルは blocking
> 処理しそうになった,もしくはしている時は割り込まれるのを許す,という処理
> は次の様になるでしょうか.
>
>  begin
>    # 何か処理
>  ensure
>    Thread.mask_interrupt(Exception, :uninterruptible) do
>      # 一度全部割り込み禁止にして
>      Thread.mask_interrupt(SignalException, :blocking_interruptible) do
>        # シグナルだけ割り込みを許して
>        # リソース解放処理
>      end
>    end
>  end

外側が :immediate_interruptible であるとすると、これは race がありますよね。

「何か処理」で例外が起きて、ensure 節に入った後、
Thread.mask_interrupt(Exception, :uninterruptible) を呼び出す前に
非同期イベントによる例外が起きると、リソース開放処理がスキップされます。

実装上はそこでは例外は起きないのかもしれませんが...
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread