changeset 14489:9bc700f13f97

(x_connection_signal): Call x_connection_closed properly. (x_connection_closed): Set FRAME_X_DISPLAY to 0. (x_destroy_window): Don't do any X operations if FRAME_X_DISPLAY is 0. (x_term_init): Use "" as 2nd arg to setlocale. (x_connection_signal): Don't stop polling. Don't mess with SIGALRM. Those were relics of the superseded Dec 19 change.
author Richard M. Stallman <rms@gnu.org>
date Sun, 04 Feb 1996 20:24:09 +0000
parents 4deac8b4941c
children c463c25a6806
files src/xterm.c
diffstat 1 files changed, 22 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Sun Feb 04 20:16:38 1996 +0000
+++ b/src/xterm.c	Sun Feb 04 20:24:09 1996 +0000
@@ -4515,6 +4515,10 @@
   if (_Xdebug)
     abort ();
 
+  /* Indicate that this display is dead.  */
+
+  dpyinfo->display = 0;
+
   /* First delete frames whose minibuffers are on frames
      that are on the dead display.  */
   FOR_EACH_FRAME (tail, frame)
@@ -4629,13 +4633,11 @@
 {
   x_connection_signal_dpyinfo = x_display_list;
 
-  stop_polling ();
   sigunblock (SIGPIPE);
 
   while (x_connection_signal_dpyinfo)
     {
       signal (SIGPIPE, x_connection_signal_1);
-      signal (SIGALRM, x_connection_signal_1);
 
 #ifdef SOLARIS2
 #ifdef XlibDisplayWriting
@@ -4643,8 +4645,11 @@
 	 This assumes that the library does not make other threads
 	 that can be locking the display legitimately.  */
       if (x_connection_signal_dpyinfo->display->flags & XlibDisplayWriting)
-	x_connection_closed (x_connection_signal_dpyinfo,
-			     "connection was lost");
+	{
+	  x_connection_signal_dpyinfo->display->flags &= ~XlibDisplayWriting;
+	  x_connection_closed (x_connection_signal_dpyinfo->display,
+			       "connection was lost");
+	}
 #endif
 #endif
 
@@ -5539,16 +5544,21 @@
 
   BLOCK_INPUT;
 
-  if (f->output_data.x->icon_desc != 0)
-    XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc);
-  XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->window_desc);
+  /* If a display connection is dead, don't try sending more
+     commands to the X server.  */
+  if (dpyinfo->display != 0)
+    {
+      if (f->output_data.x->icon_desc != 0)
+	XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc);
+      XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->window_desc);
 #ifdef USE_X_TOOLKIT
-  XtDestroyWidget (f->output_data.x->widget);
-  free_frame_menubar (f);
+      XtDestroyWidget (f->output_data.x->widget);
+      free_frame_menubar (f);
 #endif /* USE_X_TOOLKIT */
 
-  free_frame_faces (f);
-  XFlush (FRAME_X_DISPLAY (f));
+      free_frame_faces (f);
+      XFlush (FRAME_X_DISPLAY (f));
+    }
 
   xfree (f->output_data.x);
   f->output_data.x = 0;
@@ -5862,7 +5872,7 @@
     }
 
 #ifdef HAVE_X_I18N
-  setlocale (LC_ALL, NULL);
+  setlocale (LC_ALL, "");
 #endif
 
 #ifdef USE_X_TOOLKIT