# HG changeset patch # User Richard M. Stallman # Date 1030632069 0 # Node ID c7ddac695d06321b6364ac648321e6b18dc46f75 # Parent 4a9df8aa130c35ef81a3d124779aa82a27fe7f54 (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. diff -r 4a9df8aa130c -r c7ddac695d06 src/xdisp.c --- 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. */);