fix hash-table reset when the table is shrunk

svn: r11268
This commit is contained in:
Matthew Flatt 2008-08-15 03:18:00 +00:00
parent d01479b5e4
commit 448b47a953

View File

@ -490,19 +490,17 @@ void scheme_reset_hash_table(Scheme_Hash_Table *table, int *history)
if ((table->size <= 8) if ((table->size <= 8)
|| (table->count * FILL_FACTOR > (table->size >> 1))) { || (table->count * FILL_FACTOR > (table->size >> 1))) {
/* Keep same size */ /* Keep same size */
memset(table->vals, 0, sizeof(Scheme_Object *) * table->size);
memset(table->keys, 0, sizeof(Scheme_Object *) * table->size);
} else { } else {
/* Shrink by one step */ /* Shrink by one step */
Scheme_Object **ba; Scheme_Object **ba;
table->size >>= 1; table->size >>= 1;
ba = MALLOC_N(Scheme_Object *, table->size); ba = MALLOC_N(Scheme_Object *, table->size);
memcpy(ba, table->vals, sizeof(Scheme_Object *) * table->size);
table->vals = ba; table->vals = ba;
ba = MALLOC_N(Scheme_Object *, table->size); ba = MALLOC_N(Scheme_Object *, table->size);
memcpy(ba, table->keys, sizeof(Scheme_Object *) * table->size);
table->keys = ba; table->keys = ba;
} }
memset(table->vals, 0, sizeof(Scheme_Object *) * table->size);
memset(table->keys, 0, sizeof(Scheme_Object *) * table->size);
table->count = 0; table->count = 0;
table->mcount = 0; table->mcount = 0;
} }