]> git.eshelyaron.com Git - emacs.git/commitdiff
(get_minibuffer): Be careful when calling `reset_buffer'
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 22 Jul 2003 16:12:45 +0000 (16:12 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 22 Jul 2003 16:12:45 +0000 (16:12 +0000)
which assumes the buffer is uninitialized.

src/minibuf.c

index d2331ba5d4e9a73d7a29805ce436cd7ba34fd9db..89830b0391a9e388bb704ea1c9a39d6ea4877a1b 100644 (file)
@@ -777,8 +777,27 @@ get_minibuffer (depth)
   else
     {
       int count = SPECPDL_INDEX ();
+      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 (XBUFFER (buf));
+      reset_buffer (b);
       record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
       Fset_buffer (buf);
       Fkill_all_local_variables ();