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