From: GOTOU Yuuzou Date: 2001-04-12T15:32:03+09:00 Subject: [ruby-dev:12898] Re: recursive malloc / fork deadlock / thread deadlock ごとうゆうぞうです。 In message <200104120249.f3C2neS00878@tpegasust.lab.okidata.co.jp>, `Jun Adachi ' wrote: > > setbuf/setvbufでバッファにNULLを指定している > > → stdioのバッファリングを殺している。 > > > > という、認識で間違いないですよね。 > > 多分そうなっています。 え、そうなんですか? わたしはそういう意図はありませんでした。実際、_IONBF にするとシステムの CPU 時間が秒単位でかかるようになり ました。 > これが必要なのはFreeBSDだけなので、#ifdef, #endifで囲むって手もありま > すね。 確認した範囲では NetBSD と Solaris にも同様の修正は必 要です。 > FreeBSDだけのコードを追加するのであれば、bufにNULL, sizeにBUFSIZを指定 > すると言うのも一つの手のようです(以下のカッコ書きの部分参照)。 FreeBSD の実装では サイズが 0 の場合は内部で BUFSIZ 分 のバッファを確保するようになってるみたいなので、それと 同じ効果が得られると思ったのですが、不思議です。 ちなみに、C99 には次のようにあって、特に食い違ってはい ないような気がしますが、やっぱり #ifdef でくくって BUFSIZ を指定するのが無難でしょうか。 If buf is not a null pointer, the array it points to may be used instead of a buffer allocated by the setvbuf function and the argument size specifies the size of the array; otherwise, size may determine the size of a buffer allocated by the setvbuf -- ごとうゆうぞう