tv_dict_watcher_notify: any_needs_free

This commit is contained in:
Daniel Hahler
2019-11-30 02:06:16 +01:00
committed by Jan Edmund Lazo
parent aca002e7d5
commit d6cac809b0

View File

@@ -1267,6 +1267,7 @@ void tv_dict_watcher_notify(dict_T *const dict, const char *const key,
typval_T rettv; typval_T rettv;
bool any_needs_free = false;
dict->dv_refcount++; dict->dv_refcount++;
QUEUE *w; QUEUE *w;
QUEUE_FOREACH(w, &dict->watchers, { QUEUE_FOREACH(w, &dict->watchers, {
@@ -1277,8 +1278,12 @@ void tv_dict_watcher_notify(dict_T *const dict, const char *const key,
callback_call(&watcher->callback, 3, argv, &rettv); callback_call(&watcher->callback, 3, argv, &rettv);
watcher->busy = false; watcher->busy = false;
tv_clear(&rettv); tv_clear(&rettv);
if (watcher->needs_free) {
any_needs_free = true;
}
} }
}) })
if (any_needs_free) {
QUEUE_FOREACH(w, &dict->watchers, { QUEUE_FOREACH(w, &dict->watchers, {
DictWatcher *watcher = tv_dict_watcher_node_data(w); DictWatcher *watcher = tv_dict_watcher_node_data(w);
if (watcher->needs_free) { if (watcher->needs_free) {
@@ -1286,6 +1291,7 @@ void tv_dict_watcher_notify(dict_T *const dict, const char *const key,
tv_dict_watcher_free(watcher); tv_dict_watcher_free(watcher);
} }
}) })
}
tv_dict_unref(dict); tv_dict_unref(dict);
for (size_t i = 1; i < ARRAY_SIZE(argv); i++) { for (size_t i = 1; i < ARRAY_SIZE(argv); i++) {