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 ();