# HG changeset patch # User Nina Engelhardt # Date 1370958051 -7200 # Node ID 7e7f37aa2f61d1ac87756fc7d6b91e82d90fa81e # Parent 8733d1299c3a5304a324dea03341780f51e1cf73 fix barrier diff -r 8733d1299c3a -r 7e7f37aa2f61 VSs.c --- a/VSs.c Tue Jun 11 15:37:02 2013 +0200 +++ b/VSs.c Tue Jun 11 15:40:51 2013 +0200 @@ -212,7 +212,6 @@ //semanticEnv->shutdownInitiated = FALSE; semanticEnv->coreIsDone = VMS_int__malloc( NUM_CORES * sizeof( bool32 ) ); - semanticEnv->numCoresDone = 0; //For each animation slot, there is an idle slave, and an initial // slave assigned as the current-task-slave. Create them here. SlaveVP *idleSlv, *slotTaskSlv; diff -r 8733d1299c3a -r 7e7f37aa2f61 VSs_PluginFns.c --- a/VSs_PluginFns.c Tue Jun 11 15:37:02 2013 +0200 +++ b/VSs_PluginFns.c Tue Jun 11 15:40:51 2013 +0200 @@ -139,7 +139,7 @@ if (allDone) { //means no cores have work, and none can generate more if(!isEmptyPrivQ(semEnv->barrierQ)) { while(!isEmptyPrivQ(semEnv->barrierQ)){ - resume_slaveVP(readPrivQ(semEnv->barrierQ)); + resume_slaveVP(readPrivQ(semEnv->barrierQ),semEnv); } semEnv->coreIsDone[coreNum]=FALSE; returnSlv = readPrivQ(semEnv->slavesReadyToResumeQ); @@ -150,18 +150,18 @@ } #endif } - } else if (_VMSMasterEnv->numAnimatedSlaves == 0){ - if(!isEmptyPrivQ(semEnv->barrierQ)) { - while(!isEmptyPrivQ(semEnv->barrierQ)){ - resume_slaveVP(readPrivQ(semEnv->barrierQ)); - } - semEnv->coreIsDone[coreNum]=FALSE; - returnSlv = readPrivQ(semEnv->slavesReadyToResumeQ); - goto ReturnTheSlv; - } else { - DEBUG__printf(TRUE,"Deadlock detected"); - _VMSMasterEnv->shutdownInitiated = TRUE; - } + } else if (_VMSMasterEnv->numAnimatedSlaves == 0) { + if (!isEmptyPrivQ(semEnv->barrierQ)) { + while (!isEmptyPrivQ(semEnv->barrierQ)) { + resume_slaveVP(readPrivQ(semEnv->barrierQ),semEnv); + } + semEnv->coreIsDone[coreNum] = FALSE; + returnSlv = readPrivQ(semEnv->slavesReadyToResumeQ); + goto ReturnTheSlv; + } else { + DEBUG__printf(TRUE, "Deadlock detected"); + _VMSMasterEnv->shutdownInitiated = TRUE; + } } //return NULL.. no task and none to resume returnSlv = NULL; diff -r 8733d1299c3a -r 7e7f37aa2f61 VSs_Request_Handlers.h --- a/VSs_Request_Handlers.h Tue Jun 11 15:37:02 2013 +0200 +++ b/VSs_Request_Handlers.h Tue Jun 11 15:40:51 2013 +0200 @@ -59,6 +59,9 @@ handleEndDataSingleton( VSsSemReq *semReq, SlaveVP *requestingSlv, VSsSemEnv *semEnv ); void +handleBarrier( VSsSemReq *semReq, SlaveVP *requestingSlv, + VSsSemEnv *semEnv ); +void free_task_stub( VSsTaskStub *stubToFree ); void replaceWithNewSlotSlvIfNeeded( SlaveVP *requestingSlv, VSsSemEnv *semEnv );