Fix image cache marking bug (Bug#6301).
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Mon, 22 Nov 2010 00:39:42 +0000 (19:39 -0500)
committerChong Yidong <cyd@stupidchicken.com>
Mon, 22 Nov 2010 00:39:42 +0000 (19:39 -0500)
* src/alloc.c (mark_terminals): Ensure that the image cache is marked
even if the terminal object was marked earlier (Bug#6301).

src/ChangeLog
src/alloc.c

index f986c03..0aa7e86 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-22  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * alloc.c (mark_terminals): Ensure that the image cache is marked
+       even if the terminal object was marked earlier (Bug#6301).
+
 2010-11-21  Chong Yidong  <cyd@stupidchicken.com>
 
        * editfns.c (Fbyte_to_string): Signal an error arg is not a byte.
index da63fe0..4d19d3a 100644 (file)
@@ -5771,13 +5771,14 @@ mark_terminals (void)
   for (t = terminal_list; t; t = t->next_terminal)
     {
       eassert (t->name != NULL);
-      if (!VECTOR_MARKED_P (t))
-       {
 #ifdef HAVE_WINDOW_SYSTEM
-         mark_image_cache (t->image_cache);
+      /* If a terminal object is reachable from a stacpro'ed object,
+        it might have been marked already.  Make sure the image cache
+        gets marked.  */
+      mark_image_cache (t->image_cache);
 #endif /* HAVE_WINDOW_SYSTEM */
-         mark_vectorlike ((struct Lisp_Vector *)t);
-       }
+      if (!VECTOR_MARKED_P (t))
+       mark_vectorlike ((struct Lisp_Vector *)t);
     }
 }