# HG changeset patch # User Jan Dj¸«£rv # Date 1259342824 0 # Node ID 8671036bedc45d9de308f76b1a0964e150111e38 # Parent c3a33227027b844f7d3f2b789296b5f1e22506e2 Don't crash if an X terminal is deleted with force == t. * xftfont.c (xftfont_end_for_frame): Just return if dpyinfo->display is NULL. * xterm.c (x_delete_terminal): Set dpyinfo->display to NULL. * frame.c (frame_make_pointer_invisible) (frame_make_pointer_visible): Just return if there isn't any selected frame. diff -r c3a33227027b -r 8671036bedc4 src/ChangeLog --- a/src/ChangeLog Fri Nov 27 16:38:57 2009 +0000 +++ b/src/ChangeLog Fri Nov 27 17:27:04 2009 +0000 @@ -1,5 +1,14 @@ 2009-11-27 Jan DjƤrv + * xftfont.c (xftfont_end_for_frame): Just return if dpyinfo->display + is NULL. + + * xterm.c (x_delete_terminal): Set dpyinfo->display to NULL. + + * frame.c (frame_make_pointer_invisible) + (frame_make_pointer_visible): Just return if there isn't any selected + frame. + * search.c (simple_search): Remove warning by making *p const. 2009-11-26 Dan Nicolaescu diff -r c3a33227027b -r 8671036bedc4 src/frame.c --- a/src/frame.c Fri Nov 27 16:38:57 2009 +0000 +++ b/src/frame.c Fri Nov 27 17:27:04 2009 +0000 @@ -4377,6 +4377,9 @@ { if (! NILP (Vmake_pointer_invisible)) { + if (!FRAMEP (selected_frame) || !FRAME_LIVE_P (XFRAME (selected_frame))) + return; + struct frame *f = SELECTED_FRAME (); if (f && !f->pointer_invisible && FRAME_TERMINAL (f)->toggle_invisible_pointer_hook) @@ -4394,6 +4397,9 @@ /* We don't check Vmake_pointer_invisible here in case the pointer was invisible when Vmake_pointer_invisible was set to nil. */ + if (!FRAMEP (selected_frame) || !FRAME_LIVE_P (XFRAME (selected_frame))) + return; + struct frame *f = SELECTED_FRAME (); if (f && f->pointer_invisible && f->mouse_moved && FRAME_TERMINAL (f)->toggle_invisible_pointer_hook) diff -r c3a33227027b -r 8671036bedc4 src/xftfont.c --- a/src/xftfont.c Fri Nov 27 16:38:57 2009 +0000 +++ b/src/xftfont.c Fri Nov 27 17:27:04 2009 +0000 @@ -668,7 +668,12 @@ xftfont_end_for_frame (f) FRAME_PTR f; { - XftDraw *xft_draw = font_get_frame_data (f, &xftfont_driver); + XftDraw *xft_draw; + + /* Don't do anything if display is dead */ + if (FRAME_X_DISPLAY (f) == NULL) return 0; + + xft_draw = font_get_frame_data (f, &xftfont_driver); if (xft_draw) { diff -r c3a33227027b -r 8671036bedc4 src/xterm.c --- a/src/xterm.c Fri Nov 27 16:38:57 2009 +0000 +++ b/src/xterm.c Fri Nov 27 17:27:04 2009 +0000 @@ -10747,6 +10747,8 @@ #endif /* ! USE_GTK */ } + /* Mark as dead. */ + dpyinfo->display = NULL; x_delete_display (dpyinfo); UNBLOCK_INPUT; }