Mercurial > emacs
changeset 52005:3e9cb0aeebe1
(get_minibuffer): Be careful when calling `reset_buffer'
which assumes the buffer is uninitialized.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 22 Jul 2003 16:12:45 +0000 |
parents | 34d5a525041e |
children | b1b3a648691c |
files | src/minibuf.c |
diffstat | 1 files changed, 21 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/minibuf.c Tue Jul 22 15:26:01 2003 +0000 +++ b/src/minibuf.c Tue Jul 22 16:12:45 2003 +0000 @@ -777,8 +777,27 @@ else { int count = SPECPDL_INDEX (); - - reset_buffer (XBUFFER (buf)); + Lisp_Object overlay; + struct buffer *b = XBUFFER (buf); + + /* `reset_buffer' blindly sets the list of overlays to NULL, so we + have to empty the list, otherwise we end up with overlays that + think they belong to this buffer while the buffer doesn't know about + them any more. */ + while (b->overlays_before) + { + XSETMISC (overlay, b->overlays_before); + Fdelete_overlay (overlay); + } + while (b->overlays_after) + { + XSETMISC (overlay, b->overlays_after); + Fdelete_overlay (overlay); + } + eassert (b->overlays_before == NULL); + eassert (b->overlays_after == NULL); + + reset_buffer (b); record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); Fset_buffer (buf); Fkill_all_local_variables ();