From e902cf3062b3f63be951df91ae64dd3549706f28 Mon Sep 17 00:00:00 2001 From: rtoy <rtoy> Date: Fri, 18 Aug 2006 16:58:53 +0000 Subject: [PATCH] Aargh! Was filling the wrong entry in the hash_vector when freeing an entry. Fix that. --- lisp/gencgc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lisp/gencgc.c b/lisp/gencgc.c index 0765dda14..144452d2d 100644 --- a/lisp/gencgc.c +++ b/lisp/gencgc.c @@ -7,7 +7,7 @@ * * Douglas Crosher, 1996, 1997, 1998, 1999. * - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.82 2006/08/18 16:48:22 rtoy Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.83 2006/08/18 16:58:53 rtoy Exp $ * */ @@ -3662,7 +3662,8 @@ u32_vector(lispobj obj, unsigned *length) static inline void free_hash_entry(struct hash_table *hash_table, int hash_index, int kv_index) { - unsigned *index_vector = u32_vector(hash_table->index_vector, 0); + unsigned length; + unsigned *index_vector = u32_vector(hash_table->index_vector, &length); unsigned *next_vector = u32_vector(hash_table->next_vector, 0); int free_p = 1; @@ -3688,6 +3689,7 @@ free_hash_entry(struct hash_table *hash_table, int hash_index, int kv_index) unsigned count = fixnum_value(hash_table->number_entries); lispobj* kv_vector = (lispobj *) PTR(hash_table->table); unsigned *hash_vector = u32_vector(hash_table->hash_vector, 0); + unsigned hash_index; lispobj empty_symbol; gc_assert(count > 0); @@ -3703,10 +3705,12 @@ free_hash_entry(struct hash_table *hash_table, int hash_index, int kv_index) kv_vector += 2; /* Skip over vector header and length slots */ empty_symbol = kv_vector[1]; + hash_index = EQ_HASH(kv_vector[2 * kv_index]) % length; + kv_vector[2 * kv_index] = empty_symbol; kv_vector[2 * kv_index + 1] = empty_symbol; if (hash_vector) { - hash_vector[kv_index] = EQ_BASED_HASH_VALUE; + hash_vector[hash_index] = EQ_BASED_HASH_VALUE; } } } -- GitLab