[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
error in w3m-process-kill-stray-processes (was: Error process-filter/sentinel when exec w3m-delete-buffer)
土屋です.
私の使い方だと,稀に w3m-process-kill-stray-processes() の中で
1: (save-excursion
2: (set-buffer (w3m-process-buffer obj))
3: (dolist (x (w3m-process-handlers w3m-process-object))
4: (unless (buffer-name (w3m-process-handler-parent-buffer x))
5: (setq w3m-process-queue (delq obj w3m-process-queue))
6: (when (w3m-process-process obj)
7: (w3m-process-kill-process (w3m-process-process obj))))))
の第3行で,w3m-process-object が nil のためにエラーになります.
タイミングに依存しているみたいで,再現条件が今一つはっきりしないのですが,
C-u M-x w3m-antenna RET して reload 中に,w3m-open-all-links-in-new-session()
で大量のタブを開き,開いたタブを適当に消そうとした時に起きます.
それで,w3m-process-kill-stray-processes() についての議論を遡ってみたとこ
ろ,
>> On Wed, 05 Nov 2003 12:46:30 +0900 (JST)
>> shirai@xxxxxxxxxxxxxxxxxxx (Hideyuki SHIRAI (白井秀行)) said as follows:
>mode-line に取得状況(?)を表示するようになってからだと思うのです
>が、まだ process が動いている *w3m* buffer で
>w3m-delete-buffer() などをすると、process の filter や sentinel
>でエラーが発生するので、
> * w3m.el (w3m-delete-buffer, w3m-delete-other-buffers)
> (w3m-select-buffer-delete-buffer): Call `w3m-process-stop'.
>としておきました。
>ここまでは問題ないと思うのですが、*w3m* buffer を直接
>kill-buffer したときもエラーしちゃまずいだろうということで、
>w3m-process-kill-stray-processes() という関数を作って迷子の
>process を kill するようにもしたのですが、少々自信がありません。
まで遡ってしまいました.
それで,コードを精査し直したのですが,第5行で他の handler の存在を気にせ
ずに delq してしまっているのは問題がありませんか? というわけで,
* w3m-proc.el (w3m-process-kill-stray-processes): Do not kill
process when the buffer associated to it is alive.
(w3m-process-sentinel): Do not call a handler when its parent
buffer have been killed.
という変更を加えました.
--
土屋 雅稔 ( TSUCHIYA Masatoshi )