diff options
author | Matthieu Coudron <mattator@gmail.com> | 2020-07-19 21:17:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-19 21:17:55 +0200 |
commit | 6fcbcf72c37b35713debc8c304182699d0e85b2e (patch) | |
tree | de81ec382ced10f080b498e907050a229eda3f25 /src | |
parent | 5a69eb99b753c91f801c2338b99aa78eabba17bb (diff) | |
parent | f1cbd39f7b12d2f7a2a528dbd034bacfe72809d2 (diff) | |
download | rneovim-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.c | 30 |
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; |