Mercurial > emacs
diff src/minibuf.c @ 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 | bd0acf8d5f97 |
children | 292d2d0762b8 |
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 ();