From: Jun Adachi Date: 2001-04-12T11:49:43+09:00 Subject: [ruby-dev:12895] Re: recursive malloc / fork deadlock / thread deadlock 安達@沖データと申します。 神戸さんwrites: > 完全に理解せずに書いています。 同じく。 > In message <20010412042604H.gotoyuzo@does.notwork.org> > on Thu, 12 Apr 2001 04:28:29 +0900, > GOTOU Yuuzou wrote: > > やっぱり遅くなったみたいです。 > setbuf/setvbufでバッファにNULLを指定している > → stdioのバッファリングを殺している。 > > という、認識で間違いないですよね。 多分そうなっています。 > > これでもサーバアプリケーションなんかが突然死しなくなれ > > ばかなり嬉しいので、コードに問題がなければ取り込んで欲 > > しいと個人的には思います。 これが必要なのはFreeBSDだけなので、#ifdef, #endifで囲むって手もありま すね。 #他のプラットフォームでは遅くならない。 > NULLを指定するのではなく、安全な段階でmallocしたバッファ(BUFSIZくらい > か?)を指定することってできないのでしょうか。それができるなら、性能の低 > 下も防げる気がします。 FreeBSDだけのコードを追加するのであれば、bufにNULL, sizeにBUFSIZを指定 すると言うのも一つの手のようです(以下のカッコ書きの部分参照)。 From SETBUF(3) of FreeBSD Library Functions Manual; The size parameter may be given as zero to obtain deferred optimal-size buffer allocation as usual. If it is not zero, then except for un- buffered files, the buf argument should point to a buffer at least size bytes long; this buffer will be used instead of the current buffer. (If the size argument is not zero but buf is NULL, a buffer of the given size will be allocated immediately, and released on close. This is an exten- sion to ANSI C; portable code should use a size of 0 with any NULL buffer.) #多分、修正としてはこれが一番コード量は少ないですね。 -- *------* adachi@okidata.co.jp |人∧鷲| 沖データ ソフトウェア開発2部 | <女> | 安達 淳 |牛∨獅| *------*