From 464ee80eac364e5febca88a7ded46cdd9c3a4f10 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Fri, 8 Mar 2019 19:10:27 +0100 Subject: [PATCH] Warn against recursive invocations of 'buffer-list-update-hook' (Bug#34765) * src/buffer.c (Vbuffer_list_update_hook): * doc/lispref/buffers.texi (Buffer List): Warn against recursive invocations of 'buffer-list-update-hook' (Bug#34765). --- doc/lispref/buffers.texi | 4 ++++ src/buffer.c | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi index d97a095f686..6ad1fb1824a 100644 --- a/doc/lispref/buffers.texi +++ b/doc/lispref/buffers.texi @@ -940,6 +940,10 @@ This is a normal hook run whenever the buffer list changes. Functions (@pxref{Creating Buffers}), @code{rename-buffer} (@pxref{Buffer Names}), @code{kill-buffer} (@pxref{Killing Buffers}), @code{bury-buffer} (see above) and @code{select-window} (@pxref{Selecting Windows}). + +Functions run by this hook should avoid calling @code{select-window} +with a nil @var{norecord} argument or @code{with-temp-buffer} since +either may lead to infinite recursion. @end defvar @node Creating Buffers diff --git a/src/buffer.c b/src/buffer.c index 4ab5d4efe30..12620f0d4aa 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -6236,9 +6236,11 @@ The function `kill-all-local-variables' runs this before doing anything else. * DEFVAR_LISP ("buffer-list-update-hook", Vbuffer_list_update_hook, doc: /* Hook run when the buffer list changes. -Functions running this hook are, `get-buffer-create', -`make-indirect-buffer', `rename-buffer', `kill-buffer', -`bury-buffer-internal' and `select-window'. */); +Functions (implicitly) running this hook are `get-buffer-create', +`make-indirect-buffer', `rename-buffer', `kill-buffer', `bury-buffer' +and `select-window'. Functions run by this hook should avoid calling +`select-window' with a nil NORECORD argument or `with-temp-buffer' +since either may lead to infinite recursion. */); Vbuffer_list_update_hook = Qnil; DEFSYM (Qbuffer_list_update_hook, "buffer-list-update-hook"); -- 2.39.2