Namazu-devel-ja(旧)


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

[Q] エラー処理はこれで正しいのでしょうか ?



寺西です。

perl について詳しくないので、namazu の質問というより perl の
質問のような気もするのですが、気になるので質問させてください。
namazu-2.0.5 のソースです。

namazu には、エラー時の処理が甘いのではないか?と思われる
ところが随所にあるような気がしています。例えば、

filter/compress.pl 57行目

sub filter ($$$$$) {
    my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
      = @_;

    my $tmpfile = util::tmpnam('NMZ.compr');

    util::vprint("Processing compress file ... (using  '$zcatpath')\n");

    my $fh = util::efopen("|$zcatpath > $tmpfile");
    print $fh $$cont;
    undef $fh;
    $fh = util::efopen("$tmpfile");
    my $size = util::filesize($fh);
    if ($size > $conf::FILE_SIZE_MAX) {
        return 'too_large_gzipped_file';
    }
    $$cont = util::readfile($fh);
    undef $fh;
    unlink $tmpfile;
    return undef;
}

という関数があり、FILE_SIZE_MAX より大きい場合に
return しますが、この時、

    $fh->close();
    undef $fh;
    unlink $tmpfile;

という処理は不要なのでしょうか?
そういうところが随所にあるのですが、何だか気持ちが悪いのです。

大量に処理していると、どんどんメモリを消費していくのは、
こういった部分が原因ではないのかと思いまして。
# 仕方がないので、--checkpoint を付けていますが、これって
# あまり美しくはないですよね。
# 実は 2.04 までmknmzできたものが 2.05 は途中で停まって
# 困っております。只今、調査中です。
--
寺西