From 365dc66cec4e0c4362a60ac13b587c82f23415a5 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 25 Oct 2010 12:04:54 -0400 Subject: [PATCH] Document GTK Emacs kill on display close in PROBLEMS. * src/xterm.c (x_connection_closed): Update comment. --- etc/PROBLEMS | 19 +++++++++---------- src/xterm.c | 8 +++++++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 093d815bd81..7090b225d7e 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -235,19 +235,18 @@ necessary but missing, please report it via M-x report-emacs-bug. 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). +** When Emacs is compiled with Gtk+, closing a display kills Emacs. -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. +There is a long-standing bug in GTK that prevents it from recovering +from disconnects: http://bugzilla.gnome.org/show_bug.cgi?id=85715. -** Emacs compiled with Gtk+ may loop forever if a display crashes. +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. -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). +If you need Emacs to be able to recover from closing displays, compile +it with the Lucid toolkit instead of GTK. * General runtime problems diff --git a/src/xterm.c b/src/xterm.c index 2721e63ee2c..401b3ecfa4e 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -7698,7 +7698,13 @@ x_connection_closed (Display *dpy, const char *error_message) #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)); -- 2.11.4.GIT