Branch: Tag:

2000-04-23

2000-04-23 03:01:26 by Martin Stjernholm <mast@lysator.liu.se>

GC fixes. Made the gc quite a bit more whiny when -d is used.

Rev: src/array.c:1.68
Rev: src/array.h:1.19
Rev: src/gc.c:1.79
Rev: src/gc.h:1.38
Rev: src/mapping.c:1.79
Rev: src/mapping.h:1.24
Rev: src/multiset.c:1.20
Rev: src/multiset.h:1.10
Rev: src/object.c:1.120
Rev: src/object.h:1.45
Rev: src/program.c:1.232
Rev: src/program.h:1.87
Rev: src/svalue.c:1.72
Rev: src/threads.h:1.89

5:   \*/   /**/   #include "global.h" - RCSID("$Id: program.c,v 1.231 2000/04/20 01:49:44 mast Exp $"); + RCSID("$Id: program.c,v 1.232 2000/04/23 03:01:26 mast Exp $");   #include "program.h"   #include "object.h"   #include "dynamic_buffer.h"
689:    MEMSET(p, 0, sizeof(struct program));    p->alignment_needed=1;    -  GC_ALLOC(); +  GC_ALLOC(p);    p->refs=1;    p->id=++current_program_id;   
784:   #else    fake_object=ALLOC_STRUCT(object);   #endif -  GC_ALLOC(); +  GC_ALLOC(fake_object);       fake_object->next=fake_object;    fake_object->prev=fake_object;
971:    FREE_PROT(p);    dmfree((char *)p);    -  GC_FREE(p); +  GC_FREE();   }      #ifdef PIKE_DEBUG
3561:   #endif   }    + #ifdef PIKE_DEBUG + INT32 gc_touch_all_programs(void) + { +  INT32 n = 0; +  struct program *p; +  struct program_state *ps; +  for (p = first_program; p; p = p->next) { +  debug_gc_touch(p); +  n++; +  } +  /* Count the fake objects. They're not part of the gc, but they're +  * still counted by the gc. */ +  if (fake_object) n++; +  for (ps = previous_program_state; ps; ps = ps->previous) +  if (ps->fake_object) n++; +  return n; + } + #endif +    void gc_check_all_programs(void)   {    struct program *p;