]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't crash if an X terminal is deleted with force == t.
authorJan Djärv <jan.h.d@swipnet.se>
Fri, 27 Nov 2009 17:27:04 +0000 (17:27 +0000)
committerJan Djärv <jan.h.d@swipnet.se>
Fri, 27 Nov 2009 17:27:04 +0000 (17:27 +0000)
* 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.

src/ChangeLog
src/frame.c
src/xftfont.c
src/xterm.c

index 495e712c6460b4b1dd6a4334b14f83a7c7aff146..5d385e6b4126cec862e53e08f33b595dad69475c 100644 (file)
@@ -1,5 +1,14 @@
 2009-11-27  Jan Djärv  <jan.h.d@swipnet.se>
 
+       * 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  <dann@ics.uci.edu>
index 4a9d30dd2158ef0aa04a540bb2a27520698041eb..1475eb68fb660cc820d958c0c7c0a64d198864ce 100644 (file)
@@ -4377,6 +4377,9 @@ frame_make_pointer_invisible ()
 {
   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 @@ frame_make_pointer_visible ()
   /* 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)
index d5ea4aa2ac3102430fc2d221dbcc13fb4d4b56b4..e2819863f07407809b0d94ee4adb31c193d420d5 100644 (file)
@@ -668,7 +668,12 @@ static int
 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)
     {
index 94093bd3848abf4137ee35e3542aa65c601317cc..9feb6c8966a69dbbaadb859ec1f83a007508484d 100644 (file)
@@ -10747,6 +10747,8 @@ x_delete_terminal (struct terminal *terminal)
 #endif /* ! USE_GTK */
     }
 
+  /* Mark as dead. */
+  dpyinfo->display = NULL;
   x_delete_display (dpyinfo);
   UNBLOCK_INPUT;
 }