1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-17 17:58:46 +00:00

(Fgarbage_collect): Mark keyboards, gtk data, and specpdl

before doing the mark_stack_check_gcpros since they are not on the stack.
This commit is contained in:
Stefan Monnier 2004-09-13 21:06:31 +00:00
parent c046590e94
commit 126f9c02d4
2 changed files with 21 additions and 15 deletions

View File

@ -1,3 +1,8 @@
2004-09-13 Stefan Monnier <monnier@iro.umontreal.ca>
* alloc.c (Fgarbage_collect): Mark keyboards, gtk data, and specpdl
before doing the mark_stack_check_gcpros since they are not on the stack.
2004-09-12 Kim F. Storm <storm@cua.dk>
* editfns.c (Fformat): Handle format strings with multiple text

View File

@ -1,6 +1,6 @@
/* Storage allocation and gc for GNU Emacs Lisp interpreter.
Copyright (C) 1985,86,88,93,94,95,97,98,1999,2000,01,02,03,2004
Free Software Foundation, Inc.
Copyright (C) 1985, 1986, 1988, 1993, 1994, 1995, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@ -4454,6 +4454,20 @@ returns nil, because real GC can't be done. */)
for (i = 0; i < staticidx; i++)
mark_object (*staticvec[i]);
for (bind = specpdl; bind != specpdl_ptr; bind++)
{
mark_object (bind->symbol);
mark_object (bind->old_value);
}
mark_kboards ();
#ifdef USE_GTK
{
extern void xg_mark_data ();
xg_mark_data ();
}
#endif
#if (GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS \
|| GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
mark_stack ();
@ -4467,11 +4481,6 @@ returns nil, because real GC can't be done. */)
#endif
mark_byte_stack ();
for (bind = specpdl; bind != specpdl_ptr; bind++)
{
mark_object (bind->symbol);
mark_object (bind->old_value);
}
for (catch = catchlist; catch; catch = catch->next)
{
mark_object (catch->tag);
@ -4483,19 +4492,11 @@ returns nil, because real GC can't be done. */)
mark_object (handler->var);
}
mark_backtrace ();
mark_kboards ();
#if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
mark_stack ();
#endif
#ifdef USE_GTK
{
extern void xg_mark_data ();
xg_mark_data ();
}
#endif
/* Everything is now marked, except for the things that require special
finalization, i.e. the undo_list.
Look thru every buffer's undo list