Project

General

Profile

Actions

Bug #11237

closed

サブスレッドがすべて終了するとメインスレッドが割り込まれる。

Added by kubo (Takehiro Kubo) almost 9 years ago. Updated over 8 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-dev:49044]

Description

https://github.com/ruby/ruby/pull/898 のほうでも報告してあるのですが、
サブスレッドがすべて終了するとメインスレッドが割り込まれます。

r37865 の変更でプロセス終了時にメインスレッドを一時的に止めて、
サブスレッドがすべて終了した時点でメインスレッドを立ち上げるように
変更されましたが、その影響でプロセス終了時以外でもサブスレッドがす
べて終了するとメインスレッドに rb_threadptr_interrupt で割り込みが
入るようになりました。

ruby 組み込みの sleep/read/write などは rb_thread_t.status を
見て status に変更がない場合は再度 sleep/read/write などを実行でき
るが、拡張ライブラリではその方法が使えません。そのためサブスレッド終了
時の割り込みなので再実行すべきか、スレッド終了時や Thread#kill による
割り込みなので素直に終了すべきか判断できないため、拡張ライブラリ側で
なんとかするということができませんでした。

そこで、プロセス終了時にはメインスレッドの rb_thread_t.status が THREAD_KILLED
になることを利用してプロセス終了時にのみメインスレッドに割り込みを入れるパッチ
を作りました。
https://github.com/kubo/ruby/commit/530575483c1ca69d0e3832f4be4c0c7d8fa272ac


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #11265: deadlock on Solaris 10 since r50900Closedngoto (Naohisa Goto)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0