Author: heimdall
Date: Sun Aug 14 18:40:33 2005
New Revision: 8964

Modified:
   branches/gmc/include/parrot/smallobject.h
   branches/gmc/src/gc_gmc.c
Log:
Bugfixes and debug info, but there is still corruption somewhere

Modified: branches/gmc/include/parrot/smallobject.h
==============================================================================
--- branches/gmc/include/parrot/smallobject.h   (original)
+++ branches/gmc/include/parrot/smallobject.h   Sun Aug 14 18:40:33 2005
@@ -198,9 +198,10 @@ typedef struct _gc_gmc_hdr_list {
 typedef struct _gc_gmc_gen {
   struct _gc_gmc_gen *next;  /* Next generation in the linked list. */
   struct _gc_gmc_gen *prev;  /* Previous generation. */
-  void *first;         /* Array of objects. */
-  void *fst_free;      /* First free place. */
+  void *first;               /* Array of objects. */
+  void *fst_free;            /* First free place. */
   size_t remaining;          /* Remaining size. */
+  UINTVAL alloc_obj;         /* Number of allocated objects. */
   Gc_gmc_hdr_list *IGP;      /* Inter Generational pointers set. */
 } Gc_gmc_gen;
 

Modified: branches/gmc/src/gc_gmc.c
==============================================================================
--- branches/gmc/src/gc_gmc.c   (original)
+++ branches/gmc/src/gc_gmc.c   Sun Aug 14 18:40:33 2005
@@ -22,6 +22,9 @@ gc_gmc_get_PMC_size(Interp *interpreter,
     return vtable->size;
 }
 
+void gdb_dummy_func(void) {
+    fprintf(stderr, "Called dummy_gdb_func\n");
+}
 
 /* Allocates and initializes a generation, but does not plug it to the pool 
yet. */
 static Gc_gmc_gen *
@@ -37,6 +40,9 @@ gc_gmc_gen_init(Interp *interpreter)
     /* And fill the blanks. */
     gen->fst_free = gen->first;
     gen->remaining = GMC_GEN_SIZE;
+    gen->alloc_obj = 0;
+
+    /*fprintf (stderr, "Allocated gen from %p,%p to %p\n", gen, gen->first, 
(char*)gen->first + gen->remaining);*/
 
     /* We have an IGP basis : only one store. */
     IGP_store = mem_sys_allocate(sizeof(Gc_gmc_hdr_store));
@@ -314,8 +320,9 @@ gc_gmc_get_free_object_of_size(Interp *i
   pmc_body = gen->fst_free;
   gen->fst_free = (void*)((char*)pmc_body + size);
   gen->remaining -= size;
+  gen->alloc_obj++;
 #ifdef GMC_DEBUG
-  fprintf (stderr,"Allocated size %d in gen %p, first: %p, remaining %d, 
next_gen: %p, fst_free: %p\n", size, gen, gen->first, gen->remaining, 
gen->next, gen->fst_free);
+  fprintf (stderr,"Allocated size %d in gen %p, first: %p, remaining %d, 
next_gen: %p, fst_free: %p, lim: %p\n", size, gen, gen->first, gen->remaining, 
gen->next, gen->fst_free, (char*)gen->fst_free + gen->remaining);
 #endif
 
 #ifdef GMC_DEBUG
@@ -388,7 +395,7 @@ static void *
 gc_gmc_get_free_sized_object(Interp *interpreter,
        struct Small_Object_Pool *pool, size_t size)
 {
-    return gc_gmc_get_free_object_of_size (interpreter, pool, size, 0);
+    return gc_gmc_get_free_object_of_size (interpreter, pool, 
sizeof(Gc_gmc_hdr) + size, 0);
 }
     
 
@@ -399,14 +406,17 @@ gc_gmc_copy_gen (Gc_gmc_gen *from, Gc_gm
     dest->fst_free = (void*)((char*)dest->first + offset);
     dest->remaining = from->remaining;
     dest->IGP = from->IGP;
+#ifdef GMC_DEBUG
     fprintf (stderr, "Copying gen %p to gen %p\n", from, dest);
     fprintf (stderr, "Copying %p to %p\n", from->first, dest->first);
+#endif
     memcpy(dest->first, from->first, GMC_GEN_SIZE);
 }
 
 static void
 gc_gmc_gen_free(Gc_gmc_gen *gen)
 {
+    fprintf (stderr,"Freeing %p\n", gen->first);
     mem_sys_free(gen->first);
     mem_sys_free(gen);
 }
@@ -450,6 +460,7 @@ gc_gmc_more_pmc_bodies (Interp *interpre
        gc_gmc_gen_free(ogen);
        ogen = ogen_nxt;
     }
+    fprintf (stderr, "new yng_lst: %p\n", gen);
     dummy_gc->yng_lst = gen;
 
     for (gen = dummy_gc->yng_fst, i = 0; i < (nb_gen/2); i++, gen = gen->next);
@@ -465,13 +476,14 @@ gc_gmc_more_pmc_bodies (Interp *interpre
        gc_gmc_gen_free(ogen);
        ogen = ogen_nxt;
     }
+    fprintf(stderr, "new old_lst: %p\n", gen);
     dummy_gc->old_lst = gen;
 
     gc->yng_fst = dummy_gc->yng_fst;
     gc->yng_lst = dummy_gc->yng_lst;
     gc->old_fst = dummy_gc->old_fst;
     gc->old_lst = dummy_gc->old_lst;
-
+    gc->nb_gen = nb_gen;
 
     mem_sys_free(dummy_gc);
     

Reply via email to