# HG changeset patch # User Gerd Moellmann # Date 959601825 0 # Node ID d458dee2051827c16fbf484f766227b264684f8f # Parent 6068e9acd0ffe5026318cdcb2c4ab32a5c765deb (free_realized_faces): Block/unblock input. (free_realized_multibyte_face): Ditto. diff -r 6068e9acd0ff -r d458dee20518 src/xfaces.c --- a/src/xfaces.c Mon May 29 12:00:28 2000 +0000 +++ b/src/xfaces.c Mon May 29 12:03:45 2000 +0000 @@ -4663,6 +4663,11 @@ int i, size; struct frame *f = c->f; + /* We must block input here because we can't process X events + safely while only some faces are freed, or when the frame's + current matrix still references freed faces. */ + BLOCK_INPUT; + for (i = 0; i < c->used; ++i) { free_realized_face (f, c->faces_by_id[i]); @@ -4682,6 +4687,8 @@ clear_current_matrices (f); ++windows_or_buffers_changed; } + + UNBLOCK_INPUT; } } @@ -4698,6 +4705,11 @@ struct face *face; int i; + /* We must block input here because we can't process X events safely + while only some faces are freed, or when the frame's current + matrix still references freed faces. */ + BLOCK_INPUT; + for (i = 0; i < cache->used; i++) { face = cache->faces_by_id[i]; @@ -4709,11 +4721,18 @@ free_realized_face (f, face); } } + + /* Must do a thorough redisplay the next time. Mark current + matrices as invalid because they will reference faces freed + above. This function is also called when a frame is destroyed. + In this case, the root window of F is nil. */ if (WINDOWP (f->root_window)) { clear_current_matrices (f); ++windows_or_buffers_changed; } + + UNBLOCK_INPUT; }