]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fgarbage_collect): Mark keyboards, gtk data, and specpdl
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 13 Sep 2004 21:06:31 +0000 (21:06 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 13 Sep 2004 21:06:31 +0000 (21:06 +0000)
before doing the mark_stack_check_gcpros since they are not on the stack.

src/ChangeLog
src/alloc.c

index 5fee1e8d97d83c9632544673f62877e0767365c5..f0e8a696e52a11b6859474065664e085be5a8aca 100644 (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
index ece150f083c40dc7a467391142122c1c4335a174..bf93e7fb7bf824a0254896af4a89c1487a5daa20 100644 (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