From ddac67aa2878e0a0a026774cec303ccae1ca3f4f Mon Sep 17 00:00:00 2001
From: Martin Stjernholm <mast@lysator.liu.se>
Date: Sun, 2 Jul 2000 04:26:29 +0200
Subject: [PATCH] Fixed bug with accounting for fake objects wrt the gc.

Rev: src/program.c:1.246
---
 src/program.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/program.c b/src/program.c
index d06c4a6b0e..4469fd9c55 100644
--- a/src/program.c
+++ b/src/program.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: program.c,v 1.245 2000/06/26 15:56:28 grubba Exp $");
+RCSID("$Id: program.c,v 1.246 2000/07/02 02:26:29 mast Exp $");
 #include "program.h"
 #include "object.h"
 #include "dynamic_buffer.h"
@@ -762,7 +762,9 @@ void low_start_new_program(struct program *p,
   Pike_compiler->fake_object=ALLOC_STRUCT(object);
   Pike_compiler->fake_object->storage=0;
 #endif
-  GC_ALLOC(Pike_compiler->fake_object);
+  /* Can't use GC_ALLOC on fake objects, but still it's good to know
+   * that they never take over a stale gc marker. */
+  if (Pike_in_gc) remove_marker(Pike_compiler->fake_object);
 
   Pike_compiler->fake_object->next=Pike_compiler->fake_object;
   Pike_compiler->fake_object->prev=Pike_compiler->fake_object;
@@ -3680,11 +3682,6 @@ unsigned gc_touch_all_programs(void)
     if (p->next && p->next->prev != p)
       fatal("Error in program link list.\n");
   }
-  /* Count the fake objects. They're not part of the gc, but they're
-   * still counted by the gc. */
-  if (Pike_compiler->fake_object) n++;
-  for (ps = Pike_compiler->previous; ps; ps = ps->previous)
-    if (ps->fake_object) n++;
   return n;
 }
 #endif
-- 
GitLab