From 0a9cb82013d250c8b1f0e1604f91528e400ceff7 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 6 Jul 2006 04:10:33 +0000 Subject: [PATCH] try to fix infinite loop in hashing svn: r3611 --- src/mzscheme/src/hash.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/mzscheme/src/hash.c b/src/mzscheme/src/hash.c index 30015e4760..84ae4059fd 100644 --- a/src/mzscheme/src/hash.c +++ b/src/mzscheme/src/hash.c @@ -156,7 +156,7 @@ static Scheme_Object *do_hash(Scheme_Hash_Table *table, Scheme_Object *key, int { Scheme_Object *tkey, **keys; hash_v_t h, h2, useme = 0; - long size = table->size; + unsigned long size = table->size; rehash_key: @@ -436,19 +436,21 @@ get_bucket (Scheme_Bucket_Table *table, const char *key, int add, Scheme_Bucket hash_v_t h, h2; Scheme_Bucket *bucket; Compare_Proc compare = table->compare; - + unsigned long size; rehash_key: + size = table->size; + if (table->make_hash_indices) { table->make_hash_indices((void *)key, (long *)&h, (long *)&h2); - h = h % table->size; - h2 = h2 % table->size; + h = h % size; + h2 = h2 % size; } else { unsigned long lkey; lkey = (unsigned long)PTR_TO_LONG((Scheme_Object *)key); - h = (lkey >> 2) % table->size; - h2 = (lkey >> 3) % table->size; + h = (lkey >> 2) % size; + h2 = (lkey >> 3) % size; } if (!h2) @@ -475,7 +477,7 @@ get_bucket (Scheme_Bucket_Table *table, const char *key, int add, Scheme_Bucket } else if (add) break; scheme_hash_iteration_count++; - h = (h + h2) % table->size; + h = (h + h2) % size; } } else { scheme_hash_request_count++; @@ -485,7 +487,7 @@ get_bucket (Scheme_Bucket_Table *table, const char *key, int add, Scheme_Bucket else if (compare && !compare((void *)bucket->key, (void *)key)) return bucket; scheme_hash_iteration_count++; - h = (h + h2) % table->size; + h = (h + h2) % size; } }