changeset 111758:0813efd37bf9

Fix image cache marking bug (Bug#6301). * src/alloc.c (mark_terminals): Ensure that the image cache is marked even if the terminal object was marked earlier (Bug#6301).
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 21 Nov 2010 19:39:42 -0500
parents e9a44a85f427
children 3e35cf2d7f2e
files src/ChangeLog src/alloc.c
diffstat 2 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Nov 21 14:03:51 2010 -0500
+++ b/src/ChangeLog	Sun Nov 21 19:39:42 2010 -0500
@@ -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.
--- a/src/alloc.c	Sun Nov 21 14:03:51 2010 -0500
+++ b/src/alloc.c	Sun Nov 21 19:39:42 2010 -0500
@@ -5771,13 +5771,14 @@
   for (t = terminal_list; t; t = t->next_terminal)
     {
       eassert (t->name != NULL);
+#ifdef HAVE_WINDOW_SYSTEM
+      /* 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 */
       if (!VECTOR_MARKED_P (t))
-	{
-#ifdef HAVE_WINDOW_SYSTEM
-	  mark_image_cache (t->image_cache);
-#endif /* HAVE_WINDOW_SYSTEM */
-	  mark_vectorlike ((struct Lisp_Vector *)t);
-	}
+	mark_vectorlike ((struct Lisp_Vector *)t);
     }
 }