Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VMS_impls > VMS__MC_shared_impl
diff AnimationMaster.c @ 266:a5fa1e087c7e
Save checkpoint to come back to -- about to mangle AnimationMaster.c
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Thu, 25 Oct 2012 23:35:36 -0700 |
| parents | dafae55597ce |
| children | 608833ae2c5d |
line diff
1.1 --- a/AnimationMaster.c Tue Oct 23 23:46:17 2012 -0700 1.2 +++ b/AnimationMaster.c Thu Oct 25 23:35:36 2012 -0700 1.3 @@ -334,7 +334,7 @@ 1.4 } 1.5 else //is a task, and just suspended 1.6 { //turn slot slave into free task slave & make replacement 1.7 - if( slave->typeOfVP == TaskSlotSlv ) changeSlvType(); 1.8 + if( slave->typeOfVP == SlotTaskSlv ) changeSlvType(); 1.9 1.10 //goto normal slave request handling 1.11 goto SlaveReqHandling; 1.12 @@ -560,7 +560,7 @@ 1.13 } 1.14 else //is a task, and just suspended 1.15 { //turn slot slave into free task slave & make replacement 1.16 - if( slave->typeOfVP == TaskSlotSlv ) changeSlvType(); 1.17 + if( slave->typeOfVP == SlotTaskSlv ) changeSlvType(); 1.18 1.19 //goto normal slave request handling 1.20 goto SlaveReqHandling; 1.21 @@ -698,7 +698,7 @@ 1.22 //get end-task handler 1.23 1.24 RequestHandler 1.25 - taskEndHandler = slave->metaTask->reqHandler; 1.26 + taskEndHandler = slave->request->handler; 1.27 semanticEnv = PR_int__give_sem_env_for_slave( slave, 1.28 slave->request->langMagicNumber ); 1.29 (*taskEndHandler)( slave, semanticEnv ); 1.30 @@ -707,20 +707,17 @@ 1.31 } 1.32 case TaskCreate: 1.33 { PRHandle_CreateTask( slave ); 1.34 - justCopied_check; 1.35 RequestHandler 1.36 - taskCreateHandler = slave->metaTask->reqHandler; 1.37 + taskCreateHandler = slave->request->handler; 1.38 semanticEnv = PR_int__give_sem_env_for_slave( slave, 1.39 slave->request->langMagicNumber ); 1.40 - (*taskCreateHandler)( slave, semanticEnv ); 1.41 - 1.42 - want_to_resume_creating_slave; 1.43 + (*taskCreateHandler)( slave, semanticEnv ); //resumes creating slave 1.44 goto AssignWork; 1.45 } 1.46 default: 1.47 { //is a task, and just suspended, so tied to a free task slave 1.48 //First turn slot slave into free task slave & make replacement 1.49 - if( slave->typeOfVP == TaskSlotSlv ) 1.50 + if( slave->typeOfVP == SlotTaskSlv ) 1.51 replaceWithNewSlotSlv( slave, slave->processSlaveIsIn->processEnv ); 1.52 1.53 //goto normal slave request handling 1.54 @@ -786,22 +783,20 @@ 1.55 *The master only calls this with a slot slave that needs to be replaced. 1.56 */ 1.57 inline void 1.58 -replaceWithNewSlotSlv( SlaveVP *requestingSlv, PRProcessEnv *processEnv ) 1.59 +replaceWithNewSlotSlv( SlaveVP *requestingSlv, PRProcess *process ) 1.60 { SlaveVP *newSlotSlv; 1.61 - VSsSemData *semData; 1.62 1.63 - fixMe__still_VSs_stuff_in_here; 1.64 //get a new slave to be the slot slave 1.65 - newSlotSlv = readPrivQ( processEnv->freeTaskSlvRecycleQ ); 1.66 + newSlotSlv = readPrivQ( process->freeTaskSlvRecycleQ ); 1.67 if( newSlotSlv == NULL ) 1.68 - { newSlotSlv = PR_int__create_slaveVP( &idle_fn, NULL, processEnv, 0); 1.69 + { newSlotSlv = PR_int__create_slaveVP( &idle_fn, NULL, process, 0); 1.70 //just made a new free task slave, so count it 1.71 - processEnv->numLiveFreeTaskSlvs += 1; 1.72 + process->numLiveFreeTaskSlvs += 1; 1.73 } 1.74 1.75 //set slave values to make it the slot slave 1.76 newSlotSlv->metaTask = NULL; 1.77 - newSlotSlv->typeOfVP = TaskSlotSlv; 1.78 + newSlotSlv->typeOfVP = SlotTaskSlv; 1.79 newSlotSlv->needsTaskAssigned = TRUE; 1.80 1.81 //a slot slave is pinned to a particular slot on a particular core 1.82 @@ -813,11 +808,12 @@ 1.83 //put it into the slot slave matrix 1.84 int32 slotNum = requestingSlv->animSlotAssignedTo->slotIdx; 1.85 int32 coreNum = requestingSlv->coreAnimatedBy; 1.86 - processEnv->slotTaskSlvs[coreNum][slotNum] = newSlotSlv; 1.87 + process->slotTaskSlvs[coreNum][slotNum] = newSlotSlv; 1.88 1.89 //Fix up requester, to be an extra slave now (but not an ended one) 1.90 // because it's active, doesn't go into freeTaskSlvRecycleQ 1.91 requestingSlv->typeOfVP = FreeTaskSlv; 1.92 + check_if_need_to_change_metaTask_type_or_something; 1.93 } 1.94 1.95 1.96 @@ -862,10 +858,10 @@ 1.97 process->coreIsDone[coreNum] = FALSE; //don't just write always 1.98 1.99 switch( assignedMetaTask->taskType ) 1.100 - { case GenericSlave: goto AssignSlave; 1.101 - case ResumedTask: goto AssignSlave; 1.102 - case NewTask: goto AssignNewTask; 1.103 - case default: PR_int__throw_exception( "unknown task type ret by assigner" ); 1.104 + { case GenericSlave: goto AssignSlave; 1.105 + case SuspendedTask: goto AssignSlave; 1.106 + case AtomicTask: goto AssignNewTask; 1.107 + default: PR_int__throw_exception( "unknown task type ret by assigner" ); 1.108 } 1.109 } 1.110 else 1.111 @@ -879,7 +875,7 @@ 1.112 for( envIdx = 0; envIdx < numEnvs; envIdx++ ) //keep semEnvs in hash AND array 1.113 { semEnv = semEnvs[envIdx]; 1.114 if( semEnv->hasWork ) 1.115 - { assigner = semEnv->assigner; 1.116 + { assigner = semEnv->slaveAssigner; 1.117 assignedMetaTask = (*assigner)( semEnv, slot ); 1.118 1.119 //have work, so reset Done flag (caused by work generated on other core) 1.120 @@ -887,59 +883,20 @@ 1.121 process->coreIsDone[coreNum] = FALSE; //don't just write always 1.122 1.123 switch( assignedMetaTask->taskType ) 1.124 - { case GenericSlave: goto AssignSlave; 1.125 - case ResumedTask: goto AssignSlave; 1.126 - case NewTask: goto AssignNewTask; 1.127 - case default: PR_int__throw_exception( "unknown task type ret by assigner" ); 1.128 + { case GenericSlave: goto AssignSlave; 1.129 + case SuspendedTask: goto AssignSlave; 1.130 + case AtomicTask: goto AssignNewTask; 1.131 + default: PR_int__throw_exception( "unknown task type ret by assigner" ); 1.132 } 1.133 } 1.134 } 1.135 1.136 NoWork: 1.137 //No work, if reach here.. 1.138 - //no task, so prune the recycle pool of free task slaves 1.139 - freeTaskSlv = readPrivQ( process->freeTaskSlvRecycleQ ); 1.140 - if( freeTaskSlv != NULL ) 1.141 - { //delete, so that bound the num extras, and deliver shutdown cond 1.142 - deleteExtraneousFreeTaskSlv( freeTaskSlv, process ); 1.143 - //then return NULL 1.144 - returnSlv = NULL; 1.145 - 1.146 - goto ReturnTheSlv; 1.147 + { goto ReturnTheSlv; 1.148 } 1.149 - else 1.150 - { //candidate for shutdown.. all extras dissipated, and no tasks 1.151 - // and no ready to resume slaves, so no way to generate 1.152 - // more work (on this core -- other core might have work still) 1.153 - if( process->numLiveFreeTaskSlvs == 0 && 1.154 - process->numLiveGenericSlvs == 0 ) 1.155 - { //This core sees no way to generate more tasks, so say it 1.156 - if( process->coreIsDone[coreNum] == FALSE ) 1.157 - { process->numCoresDone += 1; 1.158 - process->coreIsDone[coreNum] = TRUE; 1.159 - #ifdef DEBUG__TURN_ON_SEQUENTIAL_MODE 1.160 - process->shutdownInitiated = TRUE; 1.161 - 1.162 - #else 1.163 - if( process->numCoresDone == NUM_CORES ) 1.164 - { //means no cores have work, and none can generate more 1.165 - process->shutdownInitiated = TRUE; 1.166 - } 1.167 - #endif 1.168 - } 1.169 - } 1.170 - //check if shutdown has been initiated by this or other core 1.171 - if( process->shutdownInitiated ) 1.172 - { returnSlv = PR_SS__create_shutdown_slave(); 1.173 - } 1.174 - else 1.175 - returnSlv = NULL; 1.176 - 1.177 - goto ReturnTheSlv; 1.178 - } //if( freeTaskSlv != NULL ) 1.179 - 1.180 - 1.181 - AssignSlave: 1.182 + 1.183 + AssignSlave: //Have a metaTask attached to a slave, so get the slave out 1.184 { //get slave pointed to by meta task. 1.185 returnSlv = assignedMetaTask->slaveAssignedTo; 1.186 1.187 @@ -1045,7 +1002,7 @@ 1.188 newSlv = PR_int__create_slaveVP(); 1.189 newSlv->typeOfVP = GenericSlv; 1.190 newSlv->processSlaveIsIn = process; 1.191 - process->numLiveGenericSlaves += 1; 1.192 + process->numLiveGenericSlvs += 1; 1.193 metaTask = PR_int__create_slave_meta_task(); 1.194 metaTask->taskID = req->ID; 1.195 metaTask->taskType = GenericSlave; 1.196 @@ -1073,12 +1030,12 @@ 1.197 semEnv = PR_int__give_sem_env_for( slave, slave->request->langMagicNumber ); 1.198 (*slave->request->handler)( slave, semEnv ); 1.199 1.200 - process->numLiveGenericSlaves -= 1; 1.201 + process->numLiveGenericSlvs -= 1; 1.202 PR_int__dissipate_slaveVP_multilang( slave ); //recycles and resets semDatas 1.203 1.204 //check End Of Process Condition 1.205 if( process->numLiveTasks == 0 && 1.206 - process->numLiveGenericSlaves == 0 ) 1.207 + process->numLiveGenericSlvs == 0 ) 1.208 signalEndOfProcess; 1.209 } 1.210 1.211 @@ -1158,7 +1115,7 @@ 1.212 1.213 //check End Of Process Condition 1.214 if( process->numLiveTasks == 0 && 1.215 - process->numLiveGenericSlaves == 0 ) 1.216 + process->numLiveGenericSlvs == 0 ) 1.217 signalEndOfProcessToCoreCtlr; 1.218 } 1.219
