Namazu-users-ja(旧)


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

Re: Too many open files



寺西です。

Tadamasa Teranishi wrote:
> 
> ガベージコレクションのタイミングは、処理系どころか実行状況(メモリの
> 使用状況とか)によって決まるのではないかと思います。
> なので、どのタイミングで起こるのかは予測不能ではないかと思います。
> 
> scope から外れた時点で即死してくれれば良いのですが、どうもそうでは
> なさそうですね。
> だったら、せめて close ぐらいは明示的にやらないとまずそうに思います。

http://www.perldoc.jp/docs/perl/5.8.0/perltoot.pod

のデストラクタのところに

> デストラクタの呼出しは、Perlのガベージコレクションシステム経由で、
> 自動的に起こります。素早いですが、幾分、怠惰なリファレンスに基づ
> いた、ガベージコレクションシステムです。呼ぶべきものが何かわかる
> ように、Perl は、デストラクタが、DESTROYと名付けられることを、
> 主張します。 Perlはデストラクタを呼ぶ適切な時期を考えますが、
> 現在のところいつ呼ばれるかははっきり定義されていません。
> このために、デストラクタは、それがいつ呼ばれるかを当てにすべき
> ではありません。

と書かれていました。
いつデストラクタが呼ばれるかわからない、またいつ呼ばれるかを当てに
すべきではないということですから、いつまでもクローズされなくても
仕方ありませんね。

使い終わったら $fh->close() を呼ぶというのが安全そうです。
util::fopen() に対応する util::fclose() とでも用意して、そこで
$fh->close() を呼ぶようにしましょうか?

HACKING-ja は修正して、util::fopen(), util::efopen() でファイル
をオープンした後は util::fclose() でファイルを閉じることとでも
すれば良いかな?

# namazu-devel-ja 向きの内容だな。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E