]> git.eshelyaron.com Git - emacs.git/commitdiff
Close the display.
authorGerd Moellmann <gerd@gnu.org>
Tue, 5 Dec 2000 16:47:31 +0000 (16:47 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 5 Dec 2000 16:47:31 +0000 (16:47 +0000)
(xim_close_dpy): Handle case that the display has been closed.

src/ChangeLog
src/xterm.c

index 996ac54d6bf3c85b25fa3867cb6a7d9ab25c70cf..39b0f4f7fb414d492097a3048661ee076b077811 100644 (file)
@@ -1,5 +1,8 @@
 2000-12-05  Gerd Moellmann  <gerd@gnu.org>
 
+       * xterm.c [USE_X_TOOLKIT]: Close the display.
+       (xim_close_dpy): Handle case that the display has been closed.
+
        * xterm.c (x_destroy_window): Reset the frame's X window after
        destroying it.
 
index 464f8c39489b3c14d97af2e5390c38be494e9135..da53834e08fa759a75948a901a616cd2d42ead01 100644 (file)
@@ -11263,14 +11263,26 @@ x_connection_closed (display, error_message)
   struct x_display_info *dpyinfo = x_display_info_for_display (display);
   Lisp_Object frame, tail;
 
-  /* Indicate that this display is dead.  */
+  /* We have to close the display to inform Xt that it doesn't
+     exist anymore.  If we don't, Xt will continue to wait for
+     events from the display.  As a consequence, a sequence of
+
+     M-x make-frame-on-display RET :1 RET
+     ...kill the new frame, so that we get an IO error...
+     M-x make-frame-on-display RET :1 RET
+
+     will indefinitely wait in Xt for events for display `:1', opened
+     in the first class to make-frame-on-display.
 
-#if 0 /* Closing the display caused a bus error on OpenWindows.  */
+     Closing the display is reported to lead to a bus error on
+     OpenWindows in certain situations.  I suspect that is a bug
+     in OpenWindows.  I don't know how to cicumvent it here.  */
+  
 #ifdef USE_X_TOOLKIT
   XtCloseDisplay (display);
-#endif
 #endif
 
+  /* Indicate that this display is dead.  */
   if (dpyinfo)
     dpyinfo->display = 0;
 
@@ -11658,11 +11670,13 @@ xim_close_dpy (dpyinfo)
 {
 #ifdef USE_XIM
 #ifdef HAVE_X11R6_XIM
-  XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
-                                   NULL, EMACS_CLASS,
-                                   xim_instantiate_callback, NULL);
+  if (dpyinfo->display)
+    XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
+                                     NULL, EMACS_CLASS,
+                                     xim_instantiate_callback, NULL);
 #endif /* not HAVE_X11R6_XIM */
-  XCloseIM (dpyinfo->xim);
+  if (dpyinfo->display)
+    XCloseIM (dpyinfo->xim);
   dpyinfo->xim = NULL;
   XFree (dpyinfo->xim_styles);
 #endif /* USE_XIM */