changeset 47100:c7ddac695d06

(redisplay_updating_p): Variable removed. (inhibit_free_realized_faces, Qinhibit_free_realized_faces): New variables. (init_iterator): Don't free realized faces if inhibit_free_realized_faces is set. (redisplay_internal): Bind Qinhibit_free_realized_faces to nil. (syms_of_xdisp): DEFVAR_BOOL inhibit-free-realized-faces, initialize Qinhibit_free_realized_faces.
author Richard M. Stallman <rms@gnu.org>
date Thu, 29 Aug 2002 14:41:09 +0000
parents 4a9df8aa130c
children 8deb7414f946
files src/xdisp.c
diffstat 1 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Thu Aug 29 14:38:12 2002 +0000
+++ b/src/xdisp.c	Thu Aug 29 14:41:09 2002 +0000
@@ -706,9 +706,12 @@
 
 int redisplaying_p;
 
-/* Non-zero while redisplay is updating the display.  */
-
-int redisplay_updating_p;
+/* Non-zero means don't free realized faces.  Bound while freeing
+   realized faces is dangerous because glyph matrices might still
+   reference them.  */
+
+int inhibit_free_realized_faces;
+Lisp_Object Qinhibit_free_realized_faces;
 
 
 /* Function prototypes.  */
@@ -1524,7 +1527,7 @@
      free realized faces now because they depend on face definitions
      that might have changed.  Don't free faces while there might be 
      desired matrices pending which reference these faces.  */
-  if (face_change_count && !redisplay_updating_p)
+  if (face_change_count && !inhibit_free_realized_faces)
     {
       face_change_count = 0;
       free_all_realized_faces (Qnil);
@@ -8522,11 +8525,11 @@
   count = SPECPDL_INDEX ();
   record_unwind_protect (unwind_redisplay, make_number (redisplaying_p));
   ++redisplaying_p;
+  specbind (Qinhibit_free_realized_faces, Qnil);
 
  retry:
   pause = 0;
   reconsider_clip_changes (w, current_buffer);
-  redisplay_updating_p = 0;
 
   /* If new fonts have been loaded that make a glyph matrix adjustment
      necessary, do it.  */
@@ -9014,9 +9017,8 @@
 				 redisplay_window_error);
 
       /* Compare desired and current matrices, perform output.  */
+      
     update:
-      redisplay_updating_p = 1;
-      
       /* If fonts changed, display again.  */
       if (fonts_changed_p)
 	goto retry;
@@ -9142,7 +9144,6 @@
     goto retry;
 
  end_of_redisplay:
-  redisplay_updating_p = 0;
   unbind_to (count, Qnil);
 }
 
@@ -9180,14 +9181,13 @@
 /* Function registered with record_unwind_protect in
    redisplay_internal.  Reset redisplaying_p to the value it had
    before redisplay_internal was called, and clear
-   redisplay_updating_p.  */
+   prevent_freeing_realized_faces_p.  */
 
 static Lisp_Object
 unwind_redisplay (old_redisplaying_p)
      Lisp_Object old_redisplaying_p;
 {
   redisplaying_p = XFASTINT (old_redisplaying_p);
-  redisplay_updating_p = 0;
   return Qnil;
 }
 
@@ -15307,6 +15307,8 @@
   staticpro (&Qobject);
   Qrisky_local_variable = intern ("risky-local-variable");
   staticpro (&Qrisky_local_variable);
+  Qinhibit_free_realized_faces = intern ("inhibit-free-realized-faces");
+  staticpro (&Qinhibit_free_realized_faces);
 
   list_of_error = Fcons (intern ("error"), Qnil);
   staticpro (&list_of_error);
@@ -15569,6 +15571,10 @@
     doc: /* Non-nil means don't eval Lisp during redisplay.  */);
   inhibit_eval_during_redisplay = 0;
 
+  DEFVAR_BOOL ("inhibit-free-realized-faces", &inhibit_free_realized_faces,
+    doc: /* Non-nil means don't free realized faces.  Internal use only.  */);
+  inhibit_free_realized_faces = 0;
+
 #if GLYPH_DEBUG
   DEFVAR_BOOL ("inhibit-try-window-id", &inhibit_try_window_id,
 	       doc: /* Inhibit try_window_id display optimization.  */);