# HG changeset patch # User Nina Engelhardt # Date 1345043102 -7200 # Node ID ed268fc7376af7b17cea0305d8f6f254dc6c8bff # Parent 832bc715fbf26945a9b2de7f9dbf89e47508b870 minor fixes diff -r 832bc715fbf2 -r ed268fc7376a VSs.c --- a/VSs.c Mon Aug 06 01:14:41 2012 -0700 +++ b/VSs.c Wed Aug 15 17:05:02 2012 +0200 @@ -96,7 +96,7 @@ parentTaskStub = create_thread_task_stub( NULL ); parentTaskStub->isEnded = TRUE; parentTaskStub->numLiveChildThreads = 1; //so dissipate works for seed - threadTaskStub->parentTasksStub = parentTaskStub; + threadTaskStub->parentTaskStub = parentTaskStub; semData = (VSsSemData *)seedSlv->semanticData; //seedVP is a thread, so has a permanent task @@ -431,13 +431,6 @@ VSs__end_thread( SlaveVP *thdToEnd ) { VSsSemData *semData; - //check whether all sub-tasks have ended.. if not, don't free the - // semantic data nor task stub of this thread. - semData = (VSsSemData *)thdToEnd->semanticData; - if( semData->taskStub->numLiveChildTasks != 0 ) - { - fix_me(); - } //Update the count of live sub-tasks in parent. If parent was a // thread and has already ended, then if this was the last sub-task, diff -r 832bc715fbf2 -r ed268fc7376a VSs.h --- a/VSs.h Mon Aug 06 01:14:41 2012 -0700 +++ b/VSs.h Wed Aug 15 17:05:02 2012 +0200 @@ -73,7 +73,7 @@ int32 numBlockingProp; SlaveVP *slaveAssignedTo; VSsPointerEntry **ptrEntries; - void* parentTasksStub; + void* parentTaskStub; int32 numLiveChildTasks; int32 numLiveChildThreads; bool32 isWaitingForChildTasksToEnd; diff -r 832bc715fbf2 -r ed268fc7376a VSs_PluginFns.c --- a/VSs_PluginFns.c Mon Aug 06 01:14:41 2012 -0700 +++ b/VSs_PluginFns.c Wed Aug 15 17:05:02 2012 +0200 @@ -290,7 +290,7 @@ //if make it to here, then is a thread slave semEnv->numLiveThreadSlvs -= 1; //for detecting shutdown condition ownTaskStub = semData->taskStub; - parentTaskStub = ownTaskStub->parentTasksStub; + parentTaskStub = ownTaskStub->parentTaskStub; //if all children ended, then free this task's stub // else, keep stub around, and last child will free it (below) @@ -384,7 +384,7 @@ newStub->args = initData; newStub->numLiveChildTasks = 0; newStub->numLiveChildThreads = 0; - newStub->parentTasksStub = NULL; + newStub->parentTaskStub = NULL; newStub->isWaitingForChildTasksToEnd = FALSE; newStub->isWaitingForChildThreadsToEnd = FALSE; newStub->taskID = NULL; @@ -439,7 +439,7 @@ //now, create a new task and assign to the thread semData->needsTaskAssigned = FALSE; //thread has a permanent task semData->taskStub = create_thread_task_stub( semReq->initData ); - semData->taskStub->parentTasksStub = parentSemData->taskStub; + semData->taskStub->parentTaskStub = parentSemData->taskStub; semData->slaveType = threadSlv; //this hdlr only creates thread slvs DEBUG__printf2(dbgRqstHdlr,"Create from: %d, new VP: %d", diff -r 832bc715fbf2 -r ed268fc7376a VSs_Request_Handlers.c --- a/VSs_Request_Handlers.c Mon Aug 06 01:14:41 2012 -0700 +++ b/VSs_Request_Handlers.c Wed Aug 15 17:05:02 2012 +0200 @@ -245,7 +245,7 @@ VSsSemData* parentSemData = (VSsSemData*) semReq->callingSlv->semanticData; - taskStub->parentTasksStub = (void*) parentSemData->taskStub; + taskStub->parentTaskStub = (void*) parentSemData->taskStub; parentSemData->taskStub->numLiveChildTasks += 1; /*The controlled arguments are then processed one by one. @@ -384,7 +384,7 @@ ptrEntries = endingTaskStub->ptrEntries; //saved in stub when create //Check if parent was waiting on this task - parent = (VSsTaskStub *) endingTaskStub->parentTasksStub; + parent = (VSsTaskStub *) endingTaskStub->parentTaskStub; parent->numLiveChildTasks -= 1; if( parent->isWaitingForChildTasksToEnd && parent->numLiveChildTasks == 0) { @@ -937,8 +937,10 @@ } else //have to wait, replace requester with new slot slv & mark waiting { - replaceWithNewSlotSlv( requestingSlv, semEnv ); - + if(semData->slaveType == slotTaskSlv || semData->slaveType == extraTaskSlv){ + replaceWithNewSlotSlv( requestingSlv, semEnv ); + } + requestingTaskStub->isWaitingForChildTasksToEnd = TRUE; } }