mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-04 19:10:37 -08:00
Avoid inflooping in redisplay due to Spacemacs and linum-mode
* src/xdisp.c (redisplay_internal): Limit the number of redisplay retries when a frame becomes garbaged as result of redisplaying it. (Bug#27115)
This commit is contained in:
parent
a20c799653
commit
7b4a0e2884
1 changed files with 10 additions and 1 deletions
11
src/xdisp.c
11
src/xdisp.c
|
|
@ -13648,6 +13648,14 @@ redisplay_internal (void)
|
|||
enum { MAX_HSCROLL_RETRIES = 16 };
|
||||
int hscroll_retries = 0;
|
||||
|
||||
/* Limit the number of retries for when frame(s) become garbaged as
|
||||
result of redisplaying them. Some packages set various redisplay
|
||||
hooks, such as window-scroll-functions, to run Lisp that always
|
||||
calls APIs which cause the frame's garbaged flag to become set,
|
||||
so we loop indefinitely. */
|
||||
enum {MAX_GARBAGED_FRAME_RETRIES = 2 };
|
||||
int garbaged_frame_retries = 0;
|
||||
|
||||
/* True means redisplay has to consider all windows on all
|
||||
frames. False, only selected_window is considered. */
|
||||
bool consider_all_windows_p;
|
||||
|
|
@ -14194,7 +14202,8 @@ redisplay_internal (void)
|
|||
garbage. We have to start over. These cases
|
||||
should be rare, so going all the way back to the
|
||||
top of redisplay should be good enough. */
|
||||
if (FRAME_GARBAGED_P (f))
|
||||
if (FRAME_GARBAGED_P (f)
|
||||
&& garbaged_frame_retries++ < MAX_GARBAGED_FRAME_RETRIES)
|
||||
goto retry;
|
||||
|
||||
#if defined (HAVE_WINDOW_SYSTEM) && !defined (HAVE_NS)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue