Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Too many open files



竹迫です。

Tadamasa Teranishi wrote:
>knok@xxxxxxxxxxxxx wrote:
>>>>   HACKING-ja に書いてあるのですが、現状のファイルアクセスのポリシーは
>>>> 
>>>>   * ファイルは陽に閉じず、 destructor にまかせる
>>>>     - $fh->close() しない (スコープで制限する)
>>>> 
>>>>   ということになっています。perl の GC との関連があるのかもしれません。
>> 
>> > この話は perl 5.8 の destructor でファイルのクローズがうまくいって
>> > いないバグがあるのではないかということでしょうか?
>> 
>>   それに近い話です。my 変数が scope からはずれても即座には破棄されない
>> のかなあ、という気がしています。以前もそれが原因による問題らしきものに
>> 遭遇した記憶があり、pdf.pl では結局陽に undef しています。

随分昔の話になりますが・・・

Re: NMZ.status Bug?
http://www.namazu.org/ml/namazu-devel-ja/msg00979.html

new IO::File で作成したファイルハンドル $fh が、スコープを抜けたときに
うまくデストラクタが実行されずにファイルをオープンしたままになっている
問題が過去にも存在していました。そのとき問題になった処理系は Windows版
ActivePerl で、ここでも同様に、明示的に undef もしくは ->close して
おくという対策を施しました。

>>   改めてコードをざっと見返してみましたが、基本的には極力短い scope の
>> なかで open/close するようになっているようです。期待どおりであれば本来
>> こういう事態は起きないはずなのですが...
>
>scope から外れてもすぐには destructor が呼ばれず、生き続けるという
>のが仕様ならば、ちょっと対策を考えないといけないですね。
># ガベージコレクションで、まとめて後で殺されるって仕様なのかな。

GCの実行タイミングは、処理系によって異なる可能性があるということでしょうか。

>少なくともファイルのクローズは destructor に頼るのではなく、自前で
>やらないといけないのかもしれませんね。

HACKING-ja が書かれたのは結構昔なので、そろそろ改訂しても良い頃
かもしれません。同様の問題にまたハマるのも極力避けたいですし…

--
  株式会社ドリーム・アーツ
    竹迫 良範  <takesako@xxxxxxxxxx>