PennMUSH 1.8.3p12
authorRick L Bird <nveid@yahoo.com>
Tue, 10 May 2011 08:54:40 +0000 (04:54 -0400)
committerRick L Bird <nveid@yahoo.com>
Tue, 10 May 2011 08:54:40 +0000 (04:54 -0400)
Author: allthecoolkidshaveone <allthecoolkidshaveone@ba372814-4f39-11de-9ad6-1127a62b9fcd>
Date:   Wed Jan 13 09:36:05 2010 +0000

    Issue 88: Possible fix for the hash table crash bug.

Fixes #235

src/htab.c

index b0d1c360b7a22828606a918bf15356ca0d87aa5a..0d8a34731d06c9bea638a8e0a769ab63ce5b248c 100644 (file)
@@ -612,14 +612,18 @@ hash_add(HASHTAB *htab, const char *key, void *hashdata)
 
   keycopy = mush_strdup(key, "hash.key");
 
-  if (!hash_insert(htab, keycopy, hashdata)) {
-    first_offset = -1;
-    resize_calls = 0;
-    if (!real_hash_resize(htab, htab->hashsize,
-                          (htab->hashfunc_offset + 1) % NHASH_MOD)) {
-      htab->entries -= 1;
-      return false;
-    }
+
+  while (1) {
+    if (!hash_insert(htab, keycopy, hashdata)) {
+      first_offset = -1;
+      resize_calls = 0;
+      if (!real_hash_resize(htab, htab->hashsize,
+                           (htab->hashfunc_offset + 1) % NHASH_MOD)) {
+       htab->entries -= 1;
+       return false;
+      }
+    } else
+      break;
   }
   return true;
 }