[mew-dist 25263] mew-count-lines() error when move to other folder
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2004年 9月 7日 (火) 20:52:11 JST
最近、ある folder から違う folder に(いろいろな手段で)移動したと
きに、たまに mew-count-lines1() の narrow-to-region() でエラーす
るな、と思っていたのですが、原因/現象がわかったような気がします。
メールの少ない folder で、丁度 multi-part なメールを展開している
状態から、メールの多い folder に移動したときに発生します。
どうなっているかというと、こんな感じで動いていて、
mew-summary-folder-cache-load() <= 新フォルダ
mew-summary-set-count-line() <= 新フォルダ
mew-count-lines(1 754760) <= 新フォルダ
mew-count-lines1(16478 754760) <= 旧フォルダ
narrow-to-region(16478 754760) <= エラー
mew-count-lines() 自体は、新しく移動した folder を
current-buffer として起動し、beg end は移動先の folder のもので
すが、
(defun mew-count-lines (beg end)
"Return number of lines between BEG and END."
(save-excursion
<<snip>>>
(if (or (not (mew-decode-syntax-p))
(not (equal (mew-decode-syntax-buffer) (current-buffer))))
~~~~~~~~~~~~~~~~~~~~~~~~ (1)
(mew-count-lines1 beg end)
(let ((mbeg (mew-decode-syntax-begin))
(mend (mew-decode-syntax-end)))
(if (or (<= end mbeg) (>= beg mend))
(mew-count-lines1 beg end)
(+ (mew-count-lines1 beg mbeg) (mew-count-lines1 mend end)))))))
(1) のところで、
(defsubst mew-decode-syntax-buffer ()
(set-buffer (marker-buffer mew-marker-decode-syntax-begin)))
~~~~~~~~~~
と前のバッファに引き戻されてから、mew-count-lines1() が動くため、
narrow-to-region() が実際のバッファサイズより大きい値で動いてエ
ラーになります。
# mew-summary-visit-folder() とか mew-summary-switch-to-folder()
# とかするときに mew-decode-syntax-delete() すると大丈夫だと思う
# けども、ちょっと危ない感じ。
--
白井秀行@寄生虫が悪さをしているんだろうなぁとちょっと悩んでしまった
Mew-dist メーリングリストの案内