aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthieu Coudron <mattator@gmail.com>2020-07-19 21:17:55 +0200
committerGitHub <noreply@github.com>2020-07-19 21:17:55 +0200
commit6fcbcf72c37b35713debc8c304182699d0e85b2e (patch)
treede81ec382ced10f080b498e907050a229eda3f25 /src
parent5a69eb99b753c91f801c2338b99aa78eabba17bb (diff)
parentf1cbd39f7b12d2f7a2a528dbd034bacfe72809d2 (diff)
downloadrneovim-6fcbcf72c37b35713debc8c304182699d0e85b2e.tar.gz
rneovim-6fcbcf72c37b35713debc8c304182699d0e85b2e.tar.bz2
rneovim-6fcbcf72c37b35713debc8c304182699d0e85b2e.zip
Merge pull request #12448 from erw7/fix-shada-write-error-on-exit
Fix shada write error on exit, vim-patch:8.2.0920
Diffstat (limited to 'src')
-rw-r--r--src/nvim/shada.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/nvim/shada.c b/src/nvim/shada.c
index 19a14f340b..95257fe945 100644
--- a/src/nvim/shada.c
+++ b/src/nvim/shada.c
@@ -2676,6 +2676,36 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
if (name == NULL) {
break;
}
+ switch (vartv.v_type) {
+ case VAR_FUNC:
+ case VAR_PARTIAL:
+ tv_clear(&vartv);
+ continue;
+ case VAR_DICT:
+ {
+ dict_T *di = vartv.vval.v_dict;
+ int copyID = get_copyID();
+ if (!set_ref_in_ht(&di->dv_hashtab, copyID, NULL)
+ && copyID == di->dv_copyID) {
+ tv_clear(&vartv);
+ continue;
+ }
+ break;
+ }
+ case VAR_LIST:
+ {
+ list_T *l = vartv.vval.v_list;
+ int copyID = get_copyID();
+ if (!set_ref_in_list(l, copyID, NULL)
+ && copyID == l->lv_copyID) {
+ tv_clear(&vartv);
+ continue;
+ }
+ break;
+ }
+ default:
+ break;
+ }
typval_T tgttv;
tv_copy(&vartv, &tgttv);
ShaDaWriteResult spe_ret;