From: f-miura@... (MIURA, Fumiaki) Date: 2010-01-14T20:03:41+09:00 Subject: [ruby-dev:40086] Re: [Bug #2603] NetBSD 5.0以降でpthreadの処理に由来する不具合 NTTレゾナントの三浦です。不完全なpatchを書いてすみません。 At Thu, 14 Jan 2010 12:32:05 +0900, Takahiro Kambe wrote: > pthreadを使用したプログラムには以下の制約があります。 > > (1) fork(2)した子プロセスは非同期シグナルに対して安全な関数だけを使用でき、 > pthread_*()な関数も使用できません(非同期シグナルに対して安全でない)。 遅ればせながらPOSIX仕様のその辺を読んでみました。確かにそうですねえ。 > [ruby-dev:40051]にて対策が提案されていますが、これを適用しても上記の状況は > 解消されないため、先に挙げた問題は発生しなくなるケースもありましたが、完全 > には解決しませんでした。 > patch-1 > 子プロセスの方で pthread関係の関数の呼び出しを止めるようにしたもの 「#if defined(__NetBSD__)」でも(rb_thread_start_timer()経由)で pthread_cond_wait()を呼び出してるみたいですが、こいつも追い出すべきで はないですか? 勘違い? それと、fork()して作られた子供のrubyはruby threadを作れない、あるいは 作れても動作は異なるということでしょうか? -- ▽R← 三浦史光 X;M R←+/,(?1↑ρM)/M←X≠.- 運命 X▽ 何かを諦める必要がありそう