diff src/hashtab.c @ 17508:34966be2e856 v8.1.1752

patch 8.1.1752: resizing hashtable is inefficient commit https://github.com/vim/vim/commit/7b73d7ebf71c9148c90a500116f25ec2314c7273 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jul 26 21:26:34 2019 +0200 patch 8.1.1752: resizing hashtable is inefficient Problem: Resizing hashtable is inefficient. Solution: Avoid resizing when the final size is predictable.
author Bram Moolenaar <Bram@vim.org>
date Fri, 26 Jul 2019 21:30:06 +0200
parents ce04ebdf26b8
children f0f9692d4487
line wrap: on
line diff
--- a/src/hashtab.c
+++ b/src/hashtab.c
@@ -286,7 +286,6 @@ hash_lock(hashtab_T *ht)
     ++ht->ht_locked;
 }
 
-#if 0	    /* currently not used */
 /*
  * Lock a hashtable at the specified number of entries.
  * Caller must make sure no more than "size" entries will be added.
@@ -298,7 +297,6 @@ hash_lock_size(hashtab_T *ht, int size)
     (void)hash_may_resize(ht, size);
     ++ht->ht_locked;
 }
-#endif
 
 /*
  * Unlock a hashtable: allow ht_array changes again.
@@ -368,10 +366,10 @@ hash_may_resize(
     }
     else
     {
-	/* Use specified size. */
-	if ((long_u)minitems < ht->ht_used)	/* just in case... */
+	// Use specified size.
+	if ((long_u)minitems < ht->ht_used)	// just in case...
 	    minitems = (int)ht->ht_used;
-	minsize = minitems * 3 / 2;	/* array is up to 2/3 full */
+	minsize = (minitems * 3 + 1) / 2;	// array is up to 2/3 full
     }
 
     newsize = HT_INIT_SIZE;