emacs-31 c6e2bd3e3b8: Restore current buffer after clone-indirect-buffer-hook errors
Sean Whitton <[email protected]> Fri, 31 Jul 2026 06:27:17 -0400 (EDT)
| Newsgroups | gmane.emacs.diffs |
|---|---|
| Message-ID | <[email protected]> |
branch: emacs-31 commit c6e2bd3e3b847a8c460e04491c0d0b2c97a8fc9b Author: Donjuanplatinum <[email protected]> Commit: Sean Whitton <[email protected]> Restore current buffer after clone-indirect-buffer-hook errors * src/buffer.c (Fmake_indirect_buffer): Replace set_buffer_internal_1 with specpdl unwind in the clone path (bug#81504). Copyright-paperwork-exempt: yes --- src/buffer.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 981a4e77739..8a5a8d03728 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -937,7 +937,7 @@ Interactively, CLONE and INHIBIT-BUFFER-HOOKS are nil. */) } else { - struct buffer *old_b = current_buffer; + specpdl_ref count = SPECPDL_INDEX (); clone_per_buffer_values (b->base_buffer, b); bset_filename (b, Qnil); @@ -946,6 +946,7 @@ Interactively, CLONE and INHIBIT-BUFFER-HOOKS are nil. */) bset_backed_up (b, Qnil); bset_local_minor_modes (b, Qnil); bset_auto_save_file_name (b, Qnil); + record_unwind_current_buffer (); set_buffer_internal_1 (b); Fset (Qbuffer_save_without_query, Qnil); Fset (Qbuffer_file_number, Qnil); @@ -955,7 +956,7 @@ Interactively, CLONE and INHIBIT-BUFFER-HOOKS are nil. */) variable copies for list variables that might be mangled due to destructive operations in the indirect buffer. */ run_hook (Qclone_indirect_buffer_hook); - set_buffer_internal_1 (old_b); + unbind_to (count, Qnil); } run_buffer_list_update_hook (b);