From 5ba0ebf342e8c70f0a4d238605f117a60d61bfc0 Mon Sep 17 00:00:00 2001 From: ketmar Date: Wed, 24 Nov 2010 17:38:57 +0200 Subject: [PATCH] fixed bug in st-finalization; note that finalization order is undefined --- src/lstcore/lst_memory.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lstcore/lst_memory.c b/src/lstcore/lst_memory.c index db606f5..12bac9d 100644 --- a/src/lstcore/lst_memory.c +++ b/src/lstcore/lst_memory.c @@ -218,7 +218,7 @@ static lstObject *gcMoveObject (lstObject *o) { if (o->fin) { /* move to 'alive with finalizers' list */ if (LST_IS_STFIN(o)) { - fprintf(stderr, "STFIN!\n"); + dprintf("STFIN!\n"); lstRemoveFromFList(&stFinListHead, o->fin); lstAddToFList(&stNewFinListHead, o->fin); } else { @@ -330,7 +330,7 @@ scanAgain: } /* and ST finalizers, if any */ if (stFinListHead) { - fprintf(stderr, "FOUND SOME ST-FINALIZERS!\n"); + dprintf("FOUND SOME ST-FINALIZERS!\n"); while (stFinListHead) { lstObject *o = stFinListHead->obj; assert(o->fin == stFinListHead); @@ -341,14 +341,14 @@ scanAgain: LST_RESET_STFIN(o); o->fin = NULL; /* it is already freed */ o = gcMoveObject(o); - fprintf(stderr, "FINOBJ: %p\n", o); + dprintf("FINOBJ: %p\n", o); lstCreateFinalizePGroup(o); } - stFinListHead = stNewFinListHead; - stNewFinListHead = NULL; /* scan new space to save ST-F anchors; no need to rescan process groups though */ goto scanAgain; } + stFinListHead = stNewFinListHead; + stNewFinListHead = NULL; /* here we can process C finalizers, if any */ while (finListHead) { LstFinLink *n = finListHead->next; @@ -366,7 +366,7 @@ scanAgain: /* and here we have a newly created group; convert it to the real one */ LstRunContext *ctx = grp->group; lstObject *obj = ctx->process; - fprintf(stderr, "FOUND some finalizing process group (%p) obj(%p)\n", grp, obj); + dprintf("FOUND some finalizing process group (%p) obj(%p)\n", grp, obj); lstObject *process, *context; lstObject *method = lstFindMethod(obj->stclass, "finalize"); if (!method) lstFatal("no 'finalize' method found for object marked for finalization", 0x29a); @@ -402,7 +402,7 @@ scanAgain: //if (lstMemoryPointer < lstMemoryBase) lstFatal("insufficient memory after garbage collection", sz); /* #ifdef DEBUG - fprintf(stderr, "GC: %d objects alive; %u bytes used\n", saved, (uintptr_t)curSpace->cur-(uintptr_t)curSpace->start); + dprintf("GC: %d objects alive; %u bytes used\n", saved, (uintptr_t)curSpace->cur-(uintptr_t)curSpace->start); #endif */ } -- 2.11.4.GIT