Author: heimdall
Date: Wed Aug 17 09:25:45 2005
New Revision: 8978

Modified:
   branches/gmc/src/gc_gmc.c
   branches/gmc/src/headers.c
   branches/gmc/src/pmc.c
Log:
Mini bugfixes

Modified: branches/gmc/src/gc_gmc.c
==============================================================================
--- branches/gmc/src/gc_gmc.c   (original)
+++ branches/gmc/src/gc_gmc.c   Wed Aug 17 09:25:45 2005
@@ -214,9 +214,17 @@ static void gc_gmc_deinit(Interp *interp
 
 static void gc_gmc_run(Interp *interpreter, int flags)
 {
+  if (flags & DOD_finish_FLAG) {
 #ifdef GMC_DEBUG
-  fprintf (stderr, "GMC: Trying to run dod_run\n");
+  fprintf (stderr, "GMC: Trying to run dod_run for final sweeping\n");
 #endif /* GMC_DEBUG */
+  return;
+  } else {
+#ifdef GMC_DEBUG
+  fprintf (stderr, "GMC: Trying to run dod_run for normal allocation\n");
+#endif /* GMC_DEBUG */
+  }
+
 }
 
 void Parrot_gc_gmc_init(Interp *interpreter)

Modified: branches/gmc/src/headers.c
==============================================================================
--- branches/gmc/src/headers.c  (original)
+++ branches/gmc/src/headers.c  Wed Aug 17 09:25:45 2005
@@ -55,6 +55,7 @@ get_free_buffer(Interp *interpreter,
 {
 #if PARROT_GC_GMC
     PObj *buffer = pool->get_free_sized_object(interpreter, pool, 
sizeof(pobj_body));
+    PObj_get_FLAGS(buffer) = 0;
 #else
     PObj *buffer = pool->get_free_object(interpreter, pool);
 #endif
@@ -66,9 +67,11 @@ get_free_buffer(Interp *interpreter,
     fprintf (stderr, "Allocated buffer at %p, bufstart at %p, buflen at %p\n", 
buffer, &PObj_bufstart(buffer), &PObj_buflen(buffer));
 #endif
 
+#if ! PARROT_GC_GMC
     if (pool->object_size  - GC_HEADER_SIZE > sizeof(PObj))
         memset(buffer + 1, 0,
                 pool->object_size - sizeof(PObj) - GC_HEADER_SIZE);
+#endif
     return buffer;
 }
 
@@ -271,6 +274,15 @@ new_pmc_alloc_header(Interp *interpreter
 #else
     pmc = pool->get_free_object(interpreter, pool);
 #endif
+
+#if PARROT_GC_GMC
+    PObj_get_FLAGS(pmc) = 0;
+    PMC_next_for_GC(pmc) = NULL;
+    PMC_metadata(pmc) = NULL;
+    PMC_sync(pmc) = NULL;
+    PMC_data(pmc) = NULL;
+#endif
+    
     /* clear flags, set is_PMC_FLAG */
     if (flags & PObj_is_PMC_EXT_FLAG) {
 #if ARENA_DOD_FLAGS
@@ -297,13 +309,6 @@ new_pmc_alloc_header(Interp *interpreter
         pmc->pmc_ext = NULL;
 #endif
 
-#if PARROT_GC_GMC
-    PObj_get_FLAGS(pmc) = 0;
-    PMC_next_for_GC(pmc) = NULL;
-    PMC_metadata(pmc) = NULL;
-    PMC_sync(pmc) = NULL;
-    PMC_data(pmc) = NULL;
-#endif
     PObj_get_FLAGS(pmc) |= PObj_is_PMC_FLAG|flags;
     pmc->vtable = NULL;
 #if ! PMC_DATA_IN_EXT

Modified: branches/gmc/src/pmc.c
==============================================================================
--- branches/gmc/src/pmc.c      (original)
+++ branches/gmc/src/pmc.c      Wed Aug 17 09:25:45 2005
@@ -125,6 +125,7 @@ pmc_reuse(Interp *interpreter, PMC *pmc,
         if (has_ext) {
 #if PARROT_GC_GMC
            mem_sys_free(PMC_data(pmc));
+           PMC_data(pmc) = NULL;
 #else
             /* if the PMC has a PMC_EXT structure,
              * return it to the pool/arena

Reply via email to