diff --git a/7.2.305 b/7.2.305 new file mode 100644 index 0000000..c8ad708 --- /dev/null +++ b/7.2.305 @@ -0,0 +1,105 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.305 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.305 +Problem: Recursively redrawing causes a memory leak. (Dominique Pelle) +Solution: Disallow recursive screen updating. +Files: src/screen.c + + +*** ../vim-7.2.304/src/screen.c 2009-11-11 17:07:25.000000000 +0100 +--- src/screen.c 2009-11-17 16:30:53.000000000 +0100 +*************** +*** 323,328 **** +--- 323,329 ---- + int did_one; + #endif + ++ /* Don't do anything if the screen structures are (not yet) valid. */ + if (!screen_valid(TRUE)) + return; + +*************** +*** 342,348 **** + if (curwin->w_lines_valid == 0 && type < NOT_VALID) + type = NOT_VALID; + +! if (!redrawing()) + { + redraw_later(type); /* remember type for next time */ + must_redraw = type; +--- 343,351 ---- + if (curwin->w_lines_valid == 0 && type < NOT_VALID) + type = NOT_VALID; + +! /* Postpone the redrawing when it's not needed and when being called +! * recursively. */ +! if (!redrawing() || updating_screen) + { + redraw_later(type); /* remember type for next time */ + must_redraw = type; +*************** +*** 582,587 **** +--- 585,591 ---- + + /* + * Prepare for updating one or more windows. ++ * Caller must check for "updating_screen" already set to avoid recursiveness. + */ + static void + update_prepare() +*************** +*** 663,669 **** + doit = TRUE; + } + +! if (!doit) + return; + + /* update all windows that need updating */ +--- 667,675 ---- + doit = TRUE; + } + +! /* Return when there is nothing to do or screen updating already +! * happening. */ +! if (!doit || updating_screen) + return; + + /* update all windows that need updating */ +*************** +*** 696,701 **** +--- 702,711 ---- + updateWindow(wp) + win_T *wp; + { ++ /* return if already busy updating */ ++ if (updating_screen) ++ return; ++ + update_prepare(); + + #ifdef FEAT_CLIPBOARD +*** ../vim-7.2.304/src/version.c 2009-11-25 12:38:49.000000000 +0100 +--- src/version.c 2009-11-25 13:01:48.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 305, + /**/ + +-- +If the Universe is constantly expanding, why can't I ever find a parking space? + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///