]> git.eshelyaron.com Git - emacs.git/commitdiff
(mark_object): Ignore Lisp_Misc_Free objects.
authorKim F. Storm <storm@cua.dk>
Mon, 17 May 2004 12:08:02 +0000 (12:08 +0000)
committerKim F. Storm <storm@cua.dk>
Mon, 17 May 2004 12:08:02 +0000 (12:08 +0000)
Such objects may be freed markers which still exist on an undo list.

src/alloc.c

index b5a96953adb0c125ae8d5f1f81367e24677187c8..dd4823bd9e35e965fbe845f16d45a3faa56ddd90 100644 (file)
@@ -844,7 +844,7 @@ lisp_align_free (block)
   free_ablock = ablock;
   /* Update busy count.  */
   ABLOCKS_BUSY (abase) = (struct ablocks *) (-2 + (long) ABLOCKS_BUSY (abase));
-  
+
   if (2 > (long) ABLOCKS_BUSY (abase))
     { /* All the blocks are free.  */
       int i = 0, aligned = (long) ABLOCKS_BUSY (abase);
@@ -4976,6 +4976,15 @@ mark_object (arg)
       break;
 
     case Lisp_Misc:
+      if (XMISCTYPE (obj) == Lisp_Misc_Free)
+       {
+         /* This is (probably) a freed marker which may still exist on
+            a buffer undo list, so accept it here.  */
+         /* If we reuse the marker, and it still exists on the undo
+            list, and we do undo, behaviour is unpredictable --
+            but at least we don't crash here.  KFS 2004-05-17 */
+         break;
+       }
       CHECK_ALLOCATED_AND_LIVE (live_misc_p);
       if (XMARKER (obj)->gcmarkbit)
        break;