# HG changeset patch # User Jim Blandy # Date 727670716 0 # Node ID 69b3ee873a9b07e1a6b994933970a8432cbd66fc # Parent 60685747963c294c55c4bff6e2fd27e468198129 * frame.c (Fdelete_frame): Clear the frame's display after calling the window-system-dependent frame destruction routine. We no longer need to pass the display as a separate argument to x_destroy_window. * xterm.c (x_destroy_window): Put the code which clears out f's display here, right after we free the storage it points to. Put everything, including the code which clears x_focus_frame and x_highlight_frame, inside the BLOCK/UNBLOCK_INPUT pair. * frame.c (Fdelete_frame): Clear the frame's display after calling the window-system-dependent frame destruction routine. We no longer need to pass the display as a separate argument to x_destroy_window. * xterm.c (x_destroy_window): Put the code which clears out f's display here, right after we free the storage it points to. Put everything, including the code which clears x_focus_frame and x_highlight_frame, inside the BLOCK/UNBLOCK_INPUT pair. diff -r 60685747963c -r 69b3ee873a9b src/frame.c --- a/src/frame.c Thu Jan 21 22:43:16 1993 +0000 +++ b/src/frame.c Fri Jan 22 02:45:16 1993 +0000 @@ -593,7 +593,6 @@ Lisp_Object frame; { struct frame *f; - union display displ; if (EQ (frame, Qnil)) { @@ -654,14 +653,19 @@ Vframe_list = Fdelq (frame, Vframe_list); FRAME_SET_VISIBLE (f, 0); - displ = f->display; - f->display.nothing = 0; + /* Since some events are handled at the interrupt level, we may get + an event for f at any time; if we zero out the frame's display + now, then we may trip up the event-handling code. Instead, we'll + promise that the display of the frame must be valid until we have + called the window-system-dependent frame destruction routine. */ #ifdef HAVE_X_WINDOWS if (FRAME_X_P (f)) - x_destroy_window (f, displ); + x_destroy_window (f); #endif + f->display.nothing = 0; + /* If we've deleted the last_nonminibuf_frame, then try to find another one. */ if (f == last_nonminibuf_frame)