Skip to content

Commit

Permalink
Fix infloop in lsp-mode
Browse files Browse the repository at this point in the history
* 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,
emacs-lsp/lsp-mode#1621.
  • Loading branch information
Eli-Zaretskii committed May 4, 2021
1 parent 0c993ed commit c36df52
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/indent.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
}
Expand Down

0 comments on commit c36df52

Please sign in to comment.