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:
parent
c046590e94
commit
126f9c02d4
@ -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
|
||||
|
31
src/alloc.c
31
src/alloc.c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user