Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: mknmz aborted while processing RFC text files (namazu-bugs-ja#41)
- From: knok@xxxxxxxxxxxxx (NOKUBI Takatsugu)
- Date: Wed, 1 Nov 2000 15:26:40 JST
- X-ml-name: namazu-devel-ja
- X-mail-count: 01078
<7m66m9mbpn.wl@xxxxxxxxxxxxxxxxxxxxxx>の記事において
kuriyama@xxxxxxxxxxxxさんは書きました。
>> あ、NMZ.i の方のデータが壊れている可能性を考えていませんでした。
>> index の最中になんらかの理由で処理が中断してしまったとすると、変なデータ
>> になってしまうことがあるかも知れませんね。
NMZ.i 及び NMZ.i.tmp について、次のようなテストプログラムを用いてデー
タの整合性(という程のものでもないですが...)を調べてみました。
--
#!/usr/bin/perl
use FileHandle;
my $fh_i = FileHandle::new;
$fh_i->open("< NMZ.i");
while (!$fh_i->eof()) {
my $baseleng = readw($fh_i);
print "baseleng = $baseleng\n";
my $baserecord = "";
read($fh_i, $baserecord, $baseleng);
}
# readw: read one pack 'w' word.
# This code was contributed by <furukawa@xxxxxxxxxxxx>.
sub readw ($) {
my $fh = shift;
my $ret = '';
my $c;
while (read($fh, $c, 1)){
$ret .= $c;
last unless 0x80 & ord $c;
}
return unpack('w', $ret);
}
--
単純に baseleng をひたすら読むだけのプログラムです。データに問題があ
れば同様のエラーが出るはずなのですが... NMZ.i, NMZ.i.tmp 共に問題はあ
りませんでした。
こうなると、問題はもっと別のところにあるのかなぁ、という気がしてきま
す。この問題の出る近辺の処理の流れは
* メモリ内に保持されている、新規に処理されたデータと、 NMZ.i, NMZ.ii
の内容をまとめて NMZ.i.tmp, NMZ.ii.tmp に出力
* NMZ.i.tmp, NMZ.ii.tmp を NMZ.i, NMZ.ii に rename
となっています。以前 close を明示していないことによる問題が発生した
ことがありましたが、ひょっとするとこれも同様の問題がおきているのかも...
と(根拠はないですが)疑っています。
あとで close を明示した version を作ってみますので、それで一度試して
みていただけませんでしょうか。
# こういう時は branch を切った方がいいのかな。
--
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx