diff --git a/src/mapping.c b/src/mapping.c index 471fa0bf9c737b43fa5a16cb4e48757b958f15bd..168d835bc81f1bb602890f1dd7348b3cc33a36fa 100644 --- a/src/mapping.c +++ b/src/mapping.c @@ -427,7 +427,10 @@ static struct mapping *rehash(struct mapping *m, int new_size) if(d_flag>1) check_mapping(m); #endif - if (md->hashsize == new_size) return m; + /* FIXME: The special case below seems suspect. + * /grubba 2011-09-04 + */ + if ((md->hashsize == new_size) && (md->refs == 1)) return m; init_mapping(m, new_size, md->flags); debug_malloc_touch(m); @@ -2355,6 +2358,9 @@ void check_mapping(const struct mapping *m) if(md->size > md->num_keypairs) Pike_fatal("Pretty mean hashtable there buster!\n"); + if(md->hashsize & (md->hashsize - 1)) + Pike_fatal("Invalid hashtable size: 0x%08lx\n", (long)md->hashsize); + if(md->hashsize > md->num_keypairs) Pike_fatal("Pretty mean hashtable there buster %d > %d (2)!\n",md->hashsize,md->num_keypairs);