Mercurial > vim
changeset 5539:62c720661f81 v7.4.118
updated for version 7.4.118
Problem: It's possible that redrawing the status lines causes
win_redr_custom() to be called recursively.
Solution: Protect against recursiveness. (Yasuhiro Matsumoto)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 11 Dec 2013 15:52:01 +0100 |
parents | 63ad26475179 |
children | b82c264281a8 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -6653,6 +6653,7 @@ win_redr_custom(wp, draw_ruler) win_T *wp; int draw_ruler; /* TRUE or FALSE */ { + static int entered = FALSE; int attr; int curattr; int row; @@ -6671,6 +6672,13 @@ win_redr_custom(wp, draw_ruler) win_T *ewp; int p_crb_save; + /* There is a tiny chance that this gets called recursively: When + * redrawing a status line triggers redrawing the ruler or tabline. + * Avoid trouble by not allowing recursion. */ + if (entered) + return; + entered = TRUE; + /* setup environment for the task at hand */ if (wp == NULL) { @@ -6746,7 +6754,7 @@ win_redr_custom(wp, draw_ruler) } if (maxwidth <= 0) - return; + goto theend; /* Temporarily reset 'cursorbind', we don't want a side effect from moving * the cursor away and back. */ @@ -6827,6 +6835,9 @@ win_redr_custom(wp, draw_ruler) while (col < Columns) TabPageIdxs[col++] = fillchar; } + +theend: + entered = FALSE; } #endif /* FEAT_STL_OPT */