[mew-dist 23816] IMAP scan hang problem

Kazu Yamamoto ( 山本和彦 ) kazu at example.com
2003年 7月 9日 (水) 20:08:52 JST


山本です。

1万通を越えるぐらいのフォルダを IMAP で scan していると、途中でコネク
ションが切れるという現象がありました。どこまで取得したか記録してないの
で、再び取り直さないといけません。

原因を追ったところ、Emacs 側からコネクションを切っていました。Emacs か
ら TCP Fin を送り、Tcp Rst も発生していたので、Emacs 側の問題に間違い
ありません。

Emacs のソースに(printf() の代りに) Fmessage() を突っ込んで何が起って
いるか調べた結果、おそらく次のようなことだろうと思うようになりました。

	データが来たので select() が抜ける
	Emacs が n = read() する
	coding-system に従って読んだデータを処理
	そして n の値を補正
	このとき、間違って n が 0 になる
	上位の関数で(select() が抜けたのに) n == 0 が戻ってくるので close() する

というわけで、根本的に直すことは僕には無理なので、Mew 側で場当たり的に
対処しました。具体的には、sentinel は呼ばれるので、sentinel でどこまで
取得したか記録するようにしました。

もう一度 scan すれば、次のメールから取り始めます。

P.S.

以前、POP に似たような問題があり、そのときは biff のせいになりましたが、
同様な問題を抱えているかもしれません。POP の方も、再現できれば、似たよ
うな対処をします。

--かず



Mew-dist メーリングリストの案内