diff options
author | Zach Mullen <zach.mullen@kitware.com> | 2010-03-02 20:34:37 (GMT) |
---|---|---|
committer | Zach Mullen <zach.mullen@kitware.com> | 2010-03-02 20:38:02 (GMT) |
commit | 767ffba8ff37ccb510707b768086cb189970d8c6 (patch) | |
tree | 64f088977d94731b9a2a34416d806f4dcd38cfae /Source/CTest/cmCTestMultiProcessHandler.cxx | |
parent | 634c3113ed53cd05230e7c6418e6f9c5b5e630b2 (diff) | |
download | CMake-767ffba8ff37ccb510707b768086cb189970d8c6.zip CMake-767ffba8ff37ccb510707b768086cb189970d8c6.tar.gz CMake-767ffba8ff37ccb510707b768086cb189970d8c6.tar.bz2 |
Added RESOURCE_LOCK test property.
Diffstat (limited to 'Source/CTest/cmCTestMultiProcessHandler.cxx')
-rw-r--r-- | Source/CTest/cmCTestMultiProcessHandler.cxx | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/Source/CTest/cmCTestMultiProcessHandler.cxx b/Source/CTest/cmCTestMultiProcessHandler.cxx index 9d76dd4..84df303 100644 --- a/Source/CTest/cmCTestMultiProcessHandler.cxx +++ b/Source/CTest/cmCTestMultiProcessHandler.cxx @@ -95,12 +95,16 @@ void cmCTestMultiProcessHandler::StartTestProcess(int test) std::string current_dir = cmSystemTools::GetCurrentWorkingDirectory(); cmSystemTools::ChangeDirectory(this->Properties[test]->Directory.c_str()); + // Lock the resources we'll be using + this->LockResources(test); + if(testRun->StartTest(this->Total)) { this->RunningTests.insert(testRun); } else { + this->UnlockResources(test); this->Completed++; this->TestFinishMap[test] = true; this->TestRunningMap[test] = false; @@ -113,6 +117,25 @@ void cmCTestMultiProcessHandler::StartTestProcess(int test) } //--------------------------------------------------------- +void cmCTestMultiProcessHandler::LockResources(int index) +{ + this->LockedResources.insert( + this->Properties[index]->LockedResources.begin(), + this->Properties[index]->LockedResources.end()); +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::UnlockResources(int index) +{ + for(std::set<std::string>::iterator i = + this->Properties[index]->LockedResources.begin(); + i != this->Properties[index]->LockedResources.end(); ++i) + { + this->LockedResources.erase(*i); + } +} + +//--------------------------------------------------------- void cmCTestMultiProcessHandler::EraseTest(int test) { this->Tests.erase(test); @@ -146,6 +169,17 @@ inline size_t cmCTestMultiProcessHandler::GetProcessorsUsed(int test) //--------------------------------------------------------- bool cmCTestMultiProcessHandler::StartTest(int test) { + //Check for locked resources + for(std::set<std::string>::iterator i = + this->Properties[test]->LockedResources.begin(); + i != this->Properties[test]->LockedResources.end(); ++i) + { + if(this->LockedResources.find(*i) != this->LockedResources.end()) + { + return false; + } + } + // copy the depend tests locally because when // a test is finished it will be removed from the depend list // and we don't want to be iterating a list while removing from it @@ -274,7 +308,7 @@ bool cmCTestMultiProcessHandler::CheckOutput() this->TestRunningMap[test] = false; this->RunningTests.erase(p); this->WriteCheckpoint(test); - + this->UnlockResources(test); this->RunningCount -= GetProcessorsUsed(test); delete p; } |