diff options
Diffstat (limited to 'source/ap/vim/patches/7.2.192')
-rw-r--r-- | source/ap/vim/patches/7.2.192 | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.2.192 b/source/ap/vim/patches/7.2.192 new file mode 100644 index 00000000..28cefd5b --- /dev/null +++ b/source/ap/vim/patches/7.2.192 @@ -0,0 +1,135 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.192 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.192 (after 7.2.188) +Problem: Still a crash in the garbage collector for a very rare situation. +Solution: Make sure current_copyID is always incremented correctly. (Kent + Sibilev) +Files: src/eval.c + + +*** ../vim-7.2.191/src/eval.c 2009-05-26 22:58:43.000000000 +0200 +--- src/eval.c 2009-05-29 21:13:47.000000000 +0200 +*************** +*** 6526,6532 **** + + /* Don't free variables in the previous_funccal list unless they are only + * referenced through previous_funccal. This must be first, because if +! * the item is referenced elsewhere it must not be freed. */ + for (fc = previous_funccal; fc != NULL; fc = fc->caller) + { + set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1); +--- 6526,6532 ---- + + /* Don't free variables in the previous_funccal list unless they are only + * referenced through previous_funccal. This must be first, because if +! * the item is referenced elsewhere the funccal must not be freed. */ + for (fc = previous_funccal; fc != NULL; fc = fc->caller) + { + set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1); +*************** +*** 6564,6573 **** + /* v: vars */ + set_ref_in_ht(&vimvarht, copyID); + +! /* Free lists and dictionaries that are not referenced. */ + did_free = free_unref_items(copyID); + +! /* check if any funccal can be freed now */ + for (pfc = &previous_funccal; *pfc != NULL; ) + { + if (can_free_funccal(*pfc, copyID)) +--- 6564,6577 ---- + /* v: vars */ + set_ref_in_ht(&vimvarht, copyID); + +! /* +! * 2. Free lists and dictionaries that are not referenced. +! */ + did_free = free_unref_items(copyID); + +! /* +! * 3. Check if any funccal can be freed now. +! */ + for (pfc = &previous_funccal; *pfc != NULL; ) + { + if (can_free_funccal(*pfc, copyID)) +*************** +*** 9286,9292 **** + if (noref < 0 || noref > 1) + EMSG(_(e_invarg)); + else +! item_copy(&argvars[0], rettv, TRUE, noref == 0 ? ++current_copyID : 0); + } + + /* +--- 9290,9299 ---- + if (noref < 0 || noref > 1) + EMSG(_(e_invarg)); + else +! { +! current_copyID += COPYID_INC; +! item_copy(&argvars[0], rettv, TRUE, noref == 0 ? current_copyID : 0); +! } + } + + /* +*************** +*** 18966,18972 **** + char_u *s; + char_u numbuf[NUMBUFLEN]; + +! s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID); + list_one_var_a(prefix, v->di_key, v->di_tv.v_type, + s == NULL ? (char_u *)"" : s, first); + vim_free(tofree); +--- 18973,18980 ---- + char_u *s; + char_u numbuf[NUMBUFLEN]; + +! current_copyID += COPYID_INC; +! s = echo_string(&v->di_tv, &tofree, numbuf, current_copyID); + list_one_var_a(prefix, v->di_key, v->di_tv.v_type, + s == NULL ? (char_u *)"" : s, first); + vim_free(tofree); +*************** +*** 19401,19407 **** + } + else if (eap->cmdidx == CMD_echo) + msg_puts_attr((char_u *)" ", echo_attr); +! p = echo_string(&rettv, &tofree, numbuf, ++current_copyID); + if (p != NULL) + for ( ; *p != NUL && !got_int; ++p) + { +--- 19409,19416 ---- + } + else if (eap->cmdidx == CMD_echo) + msg_puts_attr((char_u *)" ", echo_attr); +! current_copyID += COPYID_INC; +! p = echo_string(&rettv, &tofree, numbuf, current_copyID); + if (p != NULL) + for ( ; *p != NUL && !got_int; ++p) + { +*** ../vim-7.2.191/src/version.c 2009-05-26 22:58:43.000000000 +0200 +--- src/version.c 2009-06-03 13:21:20.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 192, + /**/ + +-- +Imagine a world without hypothetical situations. + + /// 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 /// |