summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog8
-rw-r--r--src/xterm.c9
-rw-r--r--src/xterm.h3
3 files changed, 15 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 13415734c79..b85aee0d35a 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2014-08-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ Avoid 100% CPU utilization on ssh session exit (Bug#17691).
+ * xterm.h (struct x_display_info): New member 'connection'.
+ * xterm.c (x_term_init, x_delete_terminal): Set and use it,
+ so that x_delete_terminal has a file descriptor to pass to
+ delete_keyboard_wait_descriptor.
+
2014-08-01 Eli Zaretskii <eliz@gnu.org>
Fix display of R2L lines when the last character fits only partially.
diff --git a/src/xterm.c b/src/xterm.c
index ed98fb10b89..7723f1af77f 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -9932,6 +9932,7 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
dpyinfo->name_list_element = Fcons (display_name, Qnil);
dpyinfo->display = dpy;
+ dpyinfo->connection = ConnectionNumber (dpyinfo->display);
/* Set the name of the terminal. */
terminal->name = xlispstrdup (display_name);
@@ -10360,7 +10361,6 @@ void
x_delete_terminal (struct terminal *terminal)
{
struct x_display_info *dpyinfo = terminal->display_info.x;
- int connection = -1;
/* Protect against recursive calls. delete_frame in
delete_terminal calls us back when it deletes our last frame. */
@@ -10379,8 +10379,6 @@ x_delete_terminal (struct terminal *terminal)
and dpyinfo->display was set to 0 to indicate that. */
if (dpyinfo->display)
{
- connection = ConnectionNumber (dpyinfo->display);
-
x_destroy_all_bitmaps (dpyinfo);
XSetCloseDownMode (dpyinfo->display, DestroyAll);
@@ -10422,11 +10420,12 @@ x_delete_terminal (struct terminal *terminal)
}
/* No more input on this descriptor. */
- if (connection != -1)
- delete_keyboard_wait_descriptor (connection);
+ if (0 <= dpyinfo->connection)
+ delete_keyboard_wait_descriptor (dpyinfo->connection);
/* Mark as dead. */
dpyinfo->display = NULL;
+ dpyinfo->connection = -1;
x_delete_display (dpyinfo);
unblock_input ();
}
diff --git a/src/xterm.h b/src/xterm.h
index 50df88cb592..2bed0d1d5d1 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -137,6 +137,9 @@ struct x_display_info
/* This says how to access this display in Xlib. */
Display *display;
+ /* A connection number (file descriptor) for the display. */
+ int connection;
+
/* This is a cons cell of the form (NAME . FONT-LIST-CACHE). */
Lisp_Object name_list_element;