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