From 1fbbfdad1fd2338a5323a8b18119c0eb4c00aee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sun, 4 Sep 2011 16:30:41 +0200 Subject: [PATCH] Mappings: rehash() now forces a new mapping_data. Fixes [bug 6062]. The actual bug seems to be old, but gets triggered by the new hashtable sizes. --- src/mapping.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mapping.c b/src/mapping.c index 471fa0bf9c..168d835bc8 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); -- GitLab