changeset 57098:0487c26b96ee

(Fgarbage_collect): Mark keyboards, gtk data, and specpdl before doing the mark_stack_check_gcpros since they are not on the stack.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 13 Sep 2004 21:06:31 +0000
parents ddfc60ef85b9
children 569cd6a5babd
files src/ChangeLog src/alloc.c
diffstat 2 files changed, 21 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Mon Sep 13 20:53:05 2004 +0000
+++ b/src/ChangeLog	Mon Sep 13 21:06:31 2004 +0000
@@ -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
--- a/src/alloc.c	Mon Sep 13 20:53:05 2004 +0000
+++ b/src/alloc.c	Mon Sep 13 21:06:31 2004 +0000
@@ -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 @@
   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 @@
 #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 @@
       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