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