From: KOSAKI Motohiro Date: 2010-01-15T09:26:02+09:00 Subject: [ruby-dev:40091] Re: [Bug #2603] NetBSD 5.0以降でpthreadの処理に由来する不具合 kosakiです > >> patch-1 > >> 子プロセスの方で pthread関係の関数の呼び出しを止めるようにしたもの > > > > 「#if defined(__NetBSD__)」でも(rb_thread_start_timer()経由)で > > pthread_cond_wait()を呼び出してるみたいですが、こいつも追い出すべきで > > はないですか? > > 勘違い? > 取り敢えず、 > > 1. 2回目のバッククォートの展開での子プロセス > 2. Net::HTTPを使っただけのつもりのプロセス > > で、thread_timer()から脱出できなくなる問題が解決するところまで確認した > 状況で、全部のパターンを追えたというわけではありません。つまり、 > > > それと、fork()して作られた子供のrubyはruby threadを作れない、あるいは > > 作れても動作は異なるということでしょうか? > といったケースはテストも何もしていませんねぇ。 すいません、よくわかっていないので、本件の方針を確認させてもらえませんか? > (1) fork(2)した子プロセスは非同期シグナルに対して安全な関数だけを使用でき、 > pthread_*()な関数も使用できません(非同期シグナルに対して安全でない)。 という所なんですが、そもそもmalloc()を呼ばないことを保証できないような 構造にすでになっているので、規格的な観点で絶対safeといえる実装に変更する事は 困難と予想しています。 NetBSDの仕様(何をしたら刺さるか)を確認し、そこだけを避けるように変更する。 という方針だと思ってよいのでしょうか?