From a715b569bfdb8091499bede5116c83dc9193eb95 Mon Sep 17 00:00:00 2001 From: Martin Stjernholm <mast@lysator.liu.se> Date: Sat, 30 Oct 1999 08:13:19 +0200 Subject: [PATCH] Fixed bug where mappings lost their flags after rehash. (Also removed some unnecessary checks in my previous patch.) Rev: src/mapping.c:1.45 --- src/mapping.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mapping.c b/src/mapping.c index 0dd837c3e6..d8de1256aa 100644 --- a/src/mapping.c +++ b/src/mapping.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: mapping.c,v 1.44 1999/10/29 03:34:34 mast Exp $"); +RCSID("$Id: mapping.c,v 1.45 1999/10/30 06:13:19 mast Exp $"); #include "main.h" #include "object.h" #include "mapping.h" @@ -77,7 +77,6 @@ static void init_mapping(struct mapping *m, INT32 size) e=sizeof(struct keypair)*size+ sizeof(struct keypair *)*hashspace; tmp=(char *)xalloc(e); - m->flags=0; m->hash=(struct keypair **) tmp; m->hashsize=hashsize; @@ -115,6 +114,7 @@ struct mapping *allocate_mapping(int size) m->next = first_mapping; m->prev = 0; m->refs = 1; + m->flags = 0; if(first_mapping) first_mapping->prev = m; first_mapping=m; @@ -1181,11 +1181,11 @@ void gc_free_all_unreferenced_mappings(void) for(prev= m->hash + e;(k=*prev);) { if((k->val.type <= MAX_COMPLEX && - !(k->val.type == T_OBJECT && k->val.u.object->prog && + !(k->val.type == T_OBJECT && k->val.u.object->prog->flags & PROGRAM_NO_WEAK_DESTRUCT) && gc_do_free(k->val.u.refs)) || (k->ind.type <= MAX_COMPLEX && - !(k->ind.type == T_OBJECT && k->ind.u.object->prog && + !(k->ind.type == T_OBJECT && k->ind.u.object->prog->flags & PROGRAM_NO_WEAK_DESTRUCT) && gc_do_free(k->ind.u.refs))) { -- GitLab