From 53e46f3ad6c61d9c8398dd38de0277c8a7f2243b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Thu, 17 Apr 2014 11:07:58 +0200 Subject: [PATCH] Prevent endless loop in x_make_frame_visible. * xterm.c (x_make_frame_visible): Prevent endless loop when frame never becomes visible, i.e. using XMonad . Fixes: debbugs:17237 --- src/ChangeLog | 5 +++++ src/xterm.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 122b093f2a0..bb3b87cfcf6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2014-04-17 Jan Djärv + + * xterm.c (x_make_frame_visible): Prevent endless loop when frame + never becomes visible, i.e. using XMonad (Bug#17237). + 2014-04-17 Eli Zaretskii * xdisp.c (Fline_pixel_height): Don't assume that the current diff --git a/src/xterm.c b/src/xterm.c index ae16e589f62..ee8372fc656 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -8899,6 +8899,7 @@ void x_make_frame_visible (struct frame *f) { int original_top, original_left; + int tries = 0; block_input (); @@ -9006,7 +9007,13 @@ x_make_frame_visible (struct frame *f) /* Force processing of queued events. */ x_sync (f); - /* This hack is still in use at least for Cygwin. See + /* If on another desktop, the deiconify/map may be ignored and the + frame never becomes visible. XMonad does this. + Prevent an endless loop. */ + if (FRAME_ICONIFIED_P (f) && ++tries > 100) + break; + + /* This hack is still in use at least for Cygwin. See http://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00351.html. Machines that do polling rather than SIGIO have been -- 2.39.5