diff options
-rw-r--r-- | src/alloc.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/alloc.c b/src/alloc.c index b5a96953adb..dd4823bd9e3 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -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; |