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