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