emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Re: Should (buffer-list) ever return killed buffers?


From: Sergey Organov
Subject: [PATCH] Re: Should (buffer-list) ever return killed buffers?
Date: Mon, 24 May 2021 16:41:07 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> Somehow it happens when `desktop-clear` is called from a timer and there
>> is *Info* buffer out there, and apparently the one that is killed is
>>
>> "#<buffer  *info tag table*>"
>>
>> I'd like to know if this is a bug in `destop-clear`, `buffer-list`,
>> info, or elsewhere?
>
> I strongly suspect that the problem goes as follows:
> - buffer-list returns a list of buffers that are all live (i.e. no bug
>   there).
> - while processing that list, some of its buffers die.
> So I think the bug is in `desktop-clear` which should skip buffers that
> have died between the call to `buffer-list` and the moment we get to
> process them.

OK, here is a patch that fixes the issue:

    lisp/desktop.el: check for killed buffers in desktop-clear

diff --git a/lisp/desktop.el b/lisp/desktop.el
index fb7c6c79a1..20d9e0f268 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -706,7 +706,8 @@ if different)."
                                  "\\)\\'")))
     (dolist (buffer (buffer-list))
       (let ((bufname (buffer-name buffer)))
-       (unless (or (eq (aref bufname 0) ?\s) ;; Don't kill internal buffers
+       (unless (or (nill bufname)
+                   (eq (aref bufname 0) ?\s) ;; Don't kill internal buffers
                    (string-match-p preserve-regexp bufname))
          (kill-buffer buffer)))))
   (delete-other-windows)

Thanks,
-- Sergey Organov



reply via email to

[Prev in Thread] Current Thread [Next in Thread]