[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 メーリングリストの案内