changeset 111252:c430a68b7083

Document GTK Emacs kill on display close in PROBLEMS. * src/xterm.c (x_connection_closed): Expand comment.
author Chong Yidong <cyd@stupidchicken.com>
date Mon, 25 Oct 2010 12:08:27 -0400
parents 2dcdfeb8d47c
children 1c494f4d6d40
files etc/PROBLEMS src/xterm.c
diffstat 2 files changed, 19 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/etc/PROBLEMS	Mon Oct 25 13:46:21 2010 +0200
+++ b/etc/PROBLEMS	Mon Oct 25 12:08:27 2010 -0400
@@ -241,19 +241,18 @@
 On platforms such as Solaris, you can also work around this problem by
 configuring your compiler to use the native linker instead of GNU ld.
 
-** Emacs compiled with Gtk+ crashes when closing a display (x-close-connection).
-
-This happens because of bugs in Gtk+.  Gtk+ 2.10 seems to be OK.  See bug
-http://bugzilla.gnome.org/show_bug.cgi?id=85715.
-
-** Emacs compiled with Gtk+ may loop forever if a display crashes.
-
-This is related to the bug above.  A scenario for this is when emacs is run
-as a server, and an X frame is created.  If the X server for the frame
-crashes or exits unexpectedly and an attempt is made to create a new
-frame on another X display, then a Gtk+ error happens in the emacs
-server that results in an endless loop.  This is not fixed in any known
-Gtk+ version (2.14.4 being current).
+** When Emacs is compiled with Gtk+, closing a display kills Emacs.
+
+There is a long-standing bug in GTK that prevents it from recovering
+from disconnects: http://bugzilla.gnome.org/show_bug.cgi?id=85715.
+
+Thus, for instance, when Emacs is run as a server on a text terminal,
+and an X frame is created, and the X server for that frame crashes or
+exits unexpectedly, Emacs must exit to prevent a GTK error that would
+result in an endless loop.
+
+If you need Emacs to be able to recover from closing displays, compile
+it with the Lucid toolkit instead of GTK.
 
 * General runtime problems
 
--- a/src/xterm.c	Mon Oct 25 13:46:21 2010 +0200
+++ b/src/xterm.c	Mon Oct 25 12:08:27 2010 -0400
@@ -7911,7 +7911,13 @@
 #endif
 
 #ifdef USE_GTK
-      /* Due to bugs in some Gtk+ versions, just exit here. */
+      /* There is a long-standing bug in GTK that prevents the GTK
+	 main loop from recovering gracefully from disconnects
+	 (https://bugzilla.gnome.org/show_bug.cgi?id=85715).  Among
+	 other problems, this gives rise to a stream of Glib error
+	 messages that, in one incident, filled up a user's hard disk
+	 (http://lists.gnu.org/archive/html/emacs-devel/2010-10/msg00927.html).
+	 So, kill Emacs unconditionally if the display is closed.  */
       {
 	fprintf (stderr, "%s\n", error_msg);
 	Fkill_emacs (make_number (70));