void petabricks::DynamicTask::decrementPredecessors(bool isAborting){ bool shouldEnqueue = false; { JLOCKSCOPE(_lock); --_numPredecessors; if(_numPredecessors==0 && _state==S_PENDING){ _state = S_READY; shouldEnqueue = true; } if(_numPredecessors==0 && _state==S_REMOTE_PENDING){ _state = S_REMOTE_READY; shouldEnqueue = true; } } if (shouldEnqueue) { if (isAborting) { runWrapper(true); } else if (_state==S_READY) { inlineOrEnqueueTask(); } else if (_state==S_REMOTE_READY) { remoteScheduleTask(); } else { JASSERT(false); } } }
int MprTestSession::runTests(MprTestResult *result) { int i; #if BLD_FEATURE_MULTITHREAD MprThread *tp; #endif for (i = 0; i < numThreads; i++) { if (sessions[i]->init() < 0) { return MPR_ERR_CANT_INITIALIZE; } } #if BLD_FEATURE_MULTITHREAD // // Now clone this session object for all other threads // for (i = 1; i < numThreads; i++) { char tName[64]; mprSprintf(tName, sizeof(tName), "test.%d", i); tp = new MprThread(runWrapper, MPR_NORMAL_PRIORITY, sessions[i], tName); if (tp->start() < 0) { break; } } #endif runWrapper(sessions[0], 0); #if BLD_FEATURE_MULTITHREAD // // Wait for all the threads to complete (simple but effective) // while (result->getThreadCount() > 1) { mprSleep(75); } #endif sessions[0]->terminateClasses(result); #if BLD_FEATURE_MULTITHREAD for (i = 1; i < numThreads; i++) { sessions[i]->term(); delete sessions[i]; } #endif mprFree(sessions); #if BLD_FEATURE_LOG mpr->logService->removeListener(logger); delete logger; #endif return 0; }
void DynamicTask::inlineOrEnqueueTask() { #ifdef INLINE_NULL_TASKS if(isNullTask()) runWrapper(); //dont bother enqueuing just run it else #endif { WorkerThread* self = WorkerThread::self(); #ifdef DEBUG JASSERT(self!=NULL); #endif self->pushLocal(this); } }
void DynamicTask::inlineOrEnqueueTask() { #ifdef INLINE_NULL_TASKS if(isNullTask()) runWrapper(); //dont bother enqueuing just run it else #endif { WorkerThread* self = WorkerThread::self(); if(self!=NULL) { self->pushLocal(this); }else{ DynamicScheduler::cpuScheduler().injectWork(this); } } }