]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_connection_signal): Explicitly check the thread interlock
authorKarl Heuer <kwzh@gnu.org>
Wed, 24 Jan 1996 23:43:22 +0000 (23:43 +0000)
committerKarl Heuer <kwzh@gnu.org>
Wed, 24 Jan 1996 23:43:22 +0000 (23:43 +0000)
on Solaris.
[SOLARIS2]: Include Xlibint.h.
(x_connection_signal): Access XlibDisplayWriting properly.
No need to sleep--if the flag is set, assume connection is dead.

src/xterm.c

index c4798f6b0ff6726ffcd494e3a893b096662035ee..a36941987395a90d7ea953a178363244664db8c8 100644 (file)
@@ -110,6 +110,11 @@ extern void _XEditResCheckMessages ();
 #include <locale.h>
 #endif
 
+#ifdef SOLARIS2
+/* For XlibDisplayWriting */
+#include <X11/Xlibint.h>
+#endif
+
 #define min(a,b) ((a)<(b) ? (a) : (b))
 #define max(a,b) ((a)>(b) ? (a) : (b))
 \f
@@ -4632,15 +4637,18 @@ x_connection_signal (signalnum) /* If we don't have an argument, */
       signal (SIGPIPE, x_connection_signal_1);
       signal (SIGALRM, x_connection_signal_1);
 
-      /* According to Jim Campbell <jec@murzim.ca.boeing.com>,
-        On Solaris 2.4, XNoOp can hang when the connection
-        has already died.  Since XNoOp should not wait,
-        let's assume that if it hangs for 3 seconds
-        that means the connection is dead.
-        This is a kludge, but I don't see any other way that works.  */
-      alarm (3);
+#ifdef SOLARIS2
+#ifdef XlibDisplayWriting
+      /* If the thread-interlock is locked, assume this connection is dead.
+        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");
+#endif
+#endif
+
       XNoOp (x_connection_signal_dpyinfo->display);
-      alarm (0);
 
       XSync (x_connection_signal_dpyinfo->display, False);