mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
eval: Do not free partial contents if partial is still referenced
Should fix some tests, including core/job_partial tests.
This commit is contained in:
parent
67b53361ba
commit
5ba24318e2
@ -19072,13 +19072,20 @@ void free_tv(typval_T *varp)
|
|||||||
|
|
||||||
#define TYPVAL_ENCODE_CONV_FUNC_START(fun, is_partial, pt) \
|
#define TYPVAL_ENCODE_CONV_FUNC_START(fun, is_partial, pt) \
|
||||||
do { \
|
do { \
|
||||||
if (!is_partial) { \
|
partial_T *const pt_ = (pt); \
|
||||||
|
tv->v_lock = VAR_UNLOCKED; \
|
||||||
|
if (is_partial) { \
|
||||||
|
if (pt_ != NULL && pt_->pt_refcount > 1) { \
|
||||||
|
pt_->pt_refcount--; \
|
||||||
|
tv->vval.v_partial = NULL; \
|
||||||
|
return OK; \
|
||||||
|
} \
|
||||||
|
} else { \
|
||||||
func_unref(fun); \
|
func_unref(fun); \
|
||||||
if (fun != empty_string) { \
|
if (fun != empty_string) { \
|
||||||
xfree(fun); \
|
xfree(fun); \
|
||||||
} \
|
} \
|
||||||
tv->vval.v_string = NULL; \
|
tv->vval.v_string = NULL; \
|
||||||
tv->v_lock = VAR_UNLOCKED; \
|
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -19114,10 +19121,10 @@ void free_tv(typval_T *varp)
|
|||||||
|
|
||||||
#define TYPVAL_ENCODE_CONV_LIST_START(ignored) \
|
#define TYPVAL_ENCODE_CONV_LIST_START(ignored) \
|
||||||
do { \
|
do { \
|
||||||
|
tv->v_lock = VAR_UNLOCKED; \
|
||||||
if (tv->vval.v_list->lv_refcount > 1) { \
|
if (tv->vval.v_list->lv_refcount > 1) { \
|
||||||
tv->vval.v_list->lv_refcount--; \
|
tv->vval.v_list->lv_refcount--; \
|
||||||
tv->vval.v_list = NULL; \
|
tv->vval.v_list = NULL; \
|
||||||
tv->v_lock = VAR_UNLOCKED; \
|
|
||||||
return OK; \
|
return OK; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -19136,16 +19143,15 @@ void free_tv(typval_T *varp)
|
|||||||
assert(list == cur_tv->vval.v_list); \
|
assert(list == cur_tv->vval.v_list); \
|
||||||
assert(cur_tv->v_type == VAR_LIST); \
|
assert(cur_tv->v_type == VAR_LIST); \
|
||||||
cur_tv->vval.v_list = NULL; \
|
cur_tv->vval.v_list = NULL; \
|
||||||
cur_tv->v_lock = VAR_UNLOCKED; \
|
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define TYPVAL_ENCODE_CONV_DICT_START(ignored) \
|
#define TYPVAL_ENCODE_CONV_DICT_START(ignored) \
|
||||||
do { \
|
do { \
|
||||||
|
tv->v_lock = VAR_UNLOCKED; \
|
||||||
if (tv->vval.v_dict->dv_refcount > 1) { \
|
if (tv->vval.v_dict->dv_refcount > 1) { \
|
||||||
tv->vval.v_dict->dv_refcount--; \
|
tv->vval.v_dict->dv_refcount--; \
|
||||||
tv->vval.v_dict = NULL; \
|
tv->vval.v_dict = NULL; \
|
||||||
tv->v_lock = VAR_UNLOCKED; \
|
|
||||||
return OK; \
|
return OK; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -19165,7 +19171,6 @@ void free_tv(typval_T *varp)
|
|||||||
assert(dict == cur_tv->vval.v_dict); \
|
assert(dict == cur_tv->vval.v_dict); \
|
||||||
assert(cur_tv->v_type == VAR_DICT); \
|
assert(cur_tv->v_type == VAR_DICT); \
|
||||||
cur_tv->vval.v_dict = NULL; \
|
cur_tv->vval.v_dict = NULL; \
|
||||||
cur_tv->v_lock = VAR_UNLOCKED; \
|
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user