patch 8.2.1210: using ht_used when looping through a hashtab is less reliable

Problem:    Using ht_used when looping through a hashtab is less reliable.
Solution:   Use ht_changed in a few more places.
diff --git a/src/userfunc.c b/src/userfunc.c
index 6e49c03..b4b8ccf 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1712,7 +1712,7 @@
     ufunc_T	*fp;
     long_u	skipped = 0;
     long_u	todo = 1;
-    long_u	used;
+    int		changed;
 
     // Clean up the current_funccal chain and the funccal stack.
     while (current_funccal != NULL)
@@ -1743,9 +1743,9 @@
 		    ++skipped;
 		else
 		{
-		    used = func_hashtab.ht_used;
+		    changed = func_hashtab.ht_changed;
 		    func_clear(fp, TRUE);
-		    if (used != func_hashtab.ht_used)
+		    if (changed != func_hashtab.ht_changed)
 		    {
 			skipped = 0;
 			break;
@@ -2484,12 +2484,11 @@
     static void
 list_functions(regmatch_T *regmatch)
 {
-    long_u	used = func_hashtab.ht_used;
-    long_u	todo = used;
-    hashitem_T	*ht_array = func_hashtab.ht_array;
+    int		changed = func_hashtab.ht_changed;
+    long_u	todo = func_hashtab.ht_used;
     hashitem_T	*hi;
 
-    for (hi = ht_array; todo > 0 && !got_int; ++hi)
+    for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
     {
 	if (!HASHITEM_EMPTY(hi))
 	{
@@ -2504,8 +2503,7 @@
 			    && vim_regexec(regmatch, fp->uf_name, 0)))
 	    {
 		list_func_head(fp, FALSE);
-		if (used != func_hashtab.ht_used
-			|| ht_array != func_hashtab.ht_array)
+		if (changed != func_hashtab.ht_changed)
 		{
 		    emsg(_("E454: function list was modified"));
 		    return;
@@ -3564,6 +3562,7 @@
 get_user_func_name(expand_T *xp, int idx)
 {
     static long_u	done;
+    static int		changed;
     static hashitem_T	*hi;
     ufunc_T		*fp;
 
@@ -3571,8 +3570,9 @@
     {
 	done = 0;
 	hi = func_hashtab.ht_array;
+	changed = func_hashtab.ht_changed;
     }
-    if (done < func_hashtab.ht_used)
+    if (changed == func_hashtab.ht_changed && done < func_hashtab.ht_used)
     {
 	if (done++ > 0)
 	    ++hi;