Commit c36df52f authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

Fix infloop in lsp-mode

* src/indent.c (line_number_display_width): Make sure the selected
window's buffer is current before using display code on it:
redisplay assumes that the window's buffer is current at all
times.  Reported by Evgeny Kurnevsky via lsp-mode's issue 1621,
https://github.com/emacs-lsp/lsp-mode/issues/1621.
parent 0c993ed1
Pipeline #10632 failed with stages
in 44 minutes and 13 seconds
......@@ -1967,9 +1967,13 @@ line_number_display_width (struct window *w, int *width, int *pixel_width)
struct it it;
struct text_pos startpos;
bool saved_restriction = false;
struct buffer *old_buf = current_buffer;
ptrdiff_t count = SPECPDL_INDEX ();
SET_TEXT_POS_FROM_MARKER (startpos, w->start);
void *itdata = bidi_shelve_cache ();
/* Make sure W's buffer is the current one. */
set_buffer_internal_1 (XBUFFER (w->contents));
/* We want to start from window's start point, but it could be
outside the accessible region, in which case we widen the
buffer temporarily. It could even be beyond the buffer's end
......@@ -1998,6 +2002,7 @@ line_number_display_width (struct window *w, int *width, int *pixel_width)
*pixel_width = it.lnum_pixel_width;
if (saved_restriction)
unbind_to (count, Qnil);
set_buffer_internal_1 (old_buf);
bidi_unshelve_cache (itdata, 0);
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment