[#49270] [Ruby trunk - Feature #11558] Time related C APIs — akr@...
Issue #11558 has been updated by Akira Tanaka.
7 messages
2015/09/30
[#49275] Re: [Ruby trunk - Feature #11558] Time related C APIs
— KOSAKI Motohiro <kosaki.motohiro@...>
2015/09/30
>> 既存の非公開APIを公開してください。
[#49278] Re: [Ruby trunk - Feature #11558] Time related C APIs
— Tanaka Akira <akr@...>
2015/10/01
2015年10月1日 7:03 KOSAKI Motohiro <kosaki.motohiro@gmail.com>:
[ruby-dev:49258] [Ruby trunk - Bug #11237] サブスレッドがすべて終了するとメインスレッドが割り込まれる。
From:
kubo@...
Date:
2015-09-13 05:08:08 UTC
List:
ruby-dev #49258
Issue #11237 has been updated by Takehiro Kubo. バックポートの要望をした者です。 拡張ライブラリ側での回避はできないのですが、拡張ライブラリを使う側での回避は可能なので、プライオリティ低めで大丈夫だと思います。メインスレッドで行っていたタスクを新規スレッドで実行するように書き換えれば良いだけなので。 直っているリリースが欲しいのはやまやまなのですが、次の TEENY リリースと 2.3 のリリースの時間差が1,2ヶ月程度なら 2.3 を待ちます。 ---------------------------------------- Bug #11237: サブスレッドがすべて終了するとメインスレッドが割り込まれる。 https://bugs.ruby-lang.org/issues/11237#change-54181 * Author: Takehiro Kubo * Status: Closed * Priority: Normal * Assignee: * ruby -v: * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED ---------------------------------------- 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 -- https://bugs.ruby-lang.org/