changeset 55634:d3542bbadad7

(mark_object): Ignore Lisp_Misc_Free objects. Such objects may be freed markers which still exist on an undo list.
author Kim F. Storm <storm@cua.dk>
date Mon, 17 May 2004 12:08:02 +0000
parents e01abd0ad603
children 333119854d83
files src/alloc.c
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/alloc.c	Mon May 17 12:07:43 2004 +0000
+++ b/src/alloc.c	Mon May 17 12:08:02 2004 +0000
@@ -844,7 +844,7 @@
   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 @@
       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;