From 967b520c4398b69aa75bad75a52b6dacb8f0de72 Mon Sep 17 00:00:00 2001 From: jjenista Date: Tue, 9 Nov 2010 22:19:02 +0000 Subject: [PATCH] bug fix, was releasing references a little too early --- Robust/src/Runtime/mlp_runtime.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Robust/src/Runtime/mlp_runtime.c b/Robust/src/Runtime/mlp_runtime.c index b357c0cc..542dad31 100644 --- a/Robust/src/Runtime/mlp_runtime.c +++ b/Robust/src/Runtime/mlp_runtime.c @@ -608,13 +608,15 @@ void RETIRERENTRY(MemoryQueue* Q, REntry * r) { void RETIRESCC(MemoryQueue *Q, REntry *r) { SCC* s=(SCC *)r->qitem; s->item.total=0;//don't need atomicdec +#ifdef RCR void *flag=NULL; flag=(void*)LOCKXCHG((unsigned INTPTR*)&(s->val), (unsigned INTPTR)flag); if (flag!=NULL) { -#if defined(RCR)&&defined(OOO_DISABLE_TASKMEMPOOL) +#ifdef OOO_DISABLE_TASKMEMPOOL RELEASE_REFERENCE_TO(((REntry*)flag)->seseRec); #endif } +#endif RESOLVECHAIN(Q); } @@ -804,6 +806,7 @@ void RESOLVEVECTOR(MemoryQueue *q, Vector *V) { REntry* val=NULL; val=(REntry*)LOCKXCHG((unsigned INTPTR*)&(tmp->array[i]), (unsigned INTPTR)val); if (val!=NULL) { + SESEcommon *seseCommon=val->seseRec; resolveDependencies(val); if (isParent(val)) { atomic_dec(&tmp->item.total); @@ -814,6 +817,7 @@ void RESOLVEVECTOR(MemoryQueue *q, Vector *V) { #if defined(RCR)&&defined(OOO_DISABLE_TASKMEMPOOL) else if (atomic_sub_and_test(1, &((REntry *)val)->count)) poolfreeinto(q->rentrypool,val); + RELEASE_REFERENCE_TO(seseCommon); #endif } } @@ -830,10 +834,12 @@ void RESOLVESCC(SCC *S) { void* flag=NULL; flag=(void*)LOCKXCHG((unsigned INTPTR*)&(S->val), (unsigned INTPTR)flag); if (flag!=NULL) { + SESEcommon *seseCommon=((REntry *)flag)->seseRec; resolveDependencies(flag); #if defined(RCR)&&defined(OOO_DISABLE_TASKMEMPOOL) if (atomic_sub_and_test(1, &((REntry *)flag)->count)) poolfreeinto(q->rentrypool, flag); + RELEASE_REFERENCE_TO(seseCommon); #endif } } @@ -856,16 +862,10 @@ void resolveDependencies(REntry* rentry){ workScheduleSubmit((void *)seseCommon); } } -#ifndef OOO_DISABLE_TASKMEMPOOL - RELEASE_REFERENCE_TO(seseCommon); -#endif } else if (type==PARENTCOARSE) { if (atomic_sub_and_test(1, &(seseCommon->unresolvedDependencies))) { psem_give_tag(seseCommon->parentsStallSem, ((SESEstall *) seseCommon)->tag); //release our reference to stallrecord -#ifndef OOO_DISABLE_TASKMEMPOOL - RELEASE_REFERENCE_TO(seseCommon); -#endif } } else { printf("ERROR: REntry type %d should never be generated in RCR..\n", rentry->type); -- 2.34.1