diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 19 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 8ce9c7712a..068a1b8ed4 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -21781,11 +21781,15 @@ ufunc_T *find_func(char_u *name) void free_all_functions(void) { hashitem_T *hi; - - /* Need to start all over every time, because func_free() may change the - * hash table. */ - while (func_hashtab.ht_used > 0) - for (hi = func_hashtab.ht_array;; ++hi) + ufunc_T *fp; + uint64_t skipped = 0; + uint64_t todo; + + // Need to start all over every time, because func_free() may change the + // hash table. + while (func_hashtab.ht_used > skipped) { + todo = func_hashtab.ht_used; + for (hi = func_hashtab.ht_array; todo > 0; hi++) { if (!HASHITEM_EMPTY(hi)) { todo--; // Only free functions that are not refcounted, those are @@ -21799,6 +21803,11 @@ void free_all_functions(void) break; } } + } + } + if (skipped == 0) { + hash_clear(&func_hashtab); + } } #endif diff --git a/src/nvim/version.c b/src/nvim/version.c index 89cd61fc6e..88c54756d2 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -243,7 +243,7 @@ static int included_patches[] = { // 2200, // 2199 NA // 2198 NA - // 2197, + 2197, // 2196, // 2195 NA 2194, |