mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-26 15:10:50 -08:00
(mark_object): Ignore Lisp_Misc_Free objects.
Such objects may be freed markers which still exist on an undo list.
This commit is contained in:
parent
54b53ba7a3
commit
d2db1c32fa
1 changed files with 10 additions and 1 deletions
11
src/alloc.c
11
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue