[Cmake-commits] [cmake-commits] king committed cmCTestMemCheckHandler.cxx 1.25.2.1 1.25.2.2 cmCTestMultiProcessHandler.cxx 1.25.2.4 1.25.2.5 cmCTestMultiProcessHandler.h 1.13.2.1 1.13.2.2

cmake-commits at cmake.org cmake-commits at cmake.org
Tue Nov 3 17:25:05 EST 2009


Update of /cvsroot/CMake/CMake/Source/CTest
In directory public:/mounts/ram/cvs-serv14310/Source/CTest

Modified Files:
      Tag: CMake-2-8
	cmCTestMemCheckHandler.cxx cmCTestMultiProcessHandler.cxx 
	cmCTestMultiProcessHandler.h 
Log Message:
CMake 2.8.0-rc5


Index: cmCTestMultiProcessHandler.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CTest/cmCTestMultiProcessHandler.cxx,v
retrieving revision 1.25.2.4
retrieving revision 1.25.2.5
diff -C 2 -d -r1.25.2.4 -r1.25.2.5
*** cmCTestMultiProcessHandler.cxx	28 Oct 2009 16:15:41 -0000	1.25.2.4
--- cmCTestMultiProcessHandler.cxx	3 Nov 2009 22:25:03 -0000	1.25.2.5
***************
*** 16,19 ****
--- 16,20 ----
  #include "cmSystemTools.h"
  #include <stdlib.h>
+ #include <stack>
  
  cmCTestMultiProcessHandler::cmCTestMultiProcessHandler()
***************
*** 57,60 ****
--- 58,65 ----
  {
    this->CheckResume();
+   if(!this->CheckCycles())
+     {
+     return;
+     }
    this->TestHandler->SetMaxIndex(this->FindMaxIndex());
    this->StartNextTests();
***************
*** 341,345 ****
    int count = 0;
    for (PropertiesMap::iterator it = this->Properties.begin();
!        it != this->Properties.end(); it ++ )
      {
      count++;
--- 346,350 ----
    int count = 0;
    for (PropertiesMap::iterator it = this->Properties.begin();
!        it != this->Properties.end(); ++it)
      {
      count++;
***************
*** 434,435 ****
--- 439,484 ----
    return max;
  }
+ 
+ //Returns true if no cycles exist in the dependency graph
+ bool cmCTestMultiProcessHandler::CheckCycles()
+ {
+   cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, 
+              "Checking test dependency graph..." << std::endl);
+   for(TestMap::iterator it = this->Tests.begin();
+       it != this->Tests.end(); ++it)
+     {
+     //DFS from each element to itself
+     std::stack<int> s;
+     std::vector<int> visited;
+     s.push(it->first);
+     visited.push_back(it->first);
+ 
+     while(!s.empty())
+       {
+       int test = s.top();
+       s.pop();
+       
+       for(TestSet::iterator d = this->Tests[test].begin();
+           d != this->Tests[test].end(); ++d)
+         {
+         s.push(*d);
+         for(std::vector<int>::iterator v = visited.begin();
+             v != visited.end(); ++v)
+           {
+           if(*v == *d)
+             {
+             //cycle exists
+             cmCTestLog(this->CTest, ERROR_MESSAGE, "Error: a cycle exists in "
+               "the test dependency graph for the test \""
+               << this->Properties[*d]->Name << "\"." << std::endl
+               << "Please fix the cycle and run ctest again." << std::endl);
+             return false;
+             }
+           }
+         visited.push_back(*d);
+         }
+       visited.pop_back();
+       }
+     }
+   return true;
+ }

Index: cmCTestMultiProcessHandler.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CTest/cmCTestMultiProcessHandler.h,v
retrieving revision 1.13.2.1
retrieving revision 1.13.2.2
diff -C 2 -d -r1.13.2.1 -r1.13.2.2
*** cmCTestMultiProcessHandler.h	1 Oct 2009 21:21:12 -0000	1.13.2.1
--- cmCTestMultiProcessHandler.h	3 Nov 2009 22:25:03 -0000	1.13.2.2
***************
*** 77,80 ****
--- 77,82 ----
    //Check if we need to resume an interrupted test set
    void CheckResume();
+   //Check if there are any circular dependencies
+   bool CheckCycles();
    int FindMaxIndex();
    inline size_t GetProcessorsUsed(int index);

Index: cmCTestMemCheckHandler.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CTest/cmCTestMemCheckHandler.cxx,v
retrieving revision 1.25.2.1
retrieving revision 1.25.2.2
diff -C 2 -d -r1.25.2.1 -r1.25.2.2
*** cmCTestMemCheckHandler.cxx	1 Oct 2009 21:21:12 -0000	1.25.2.1
--- cmCTestMemCheckHandler.cxx	3 Nov 2009 22:25:03 -0000	1.25.2.2
***************
*** 660,665 ****
    cmsys::RegularExpression vgFMM(
      "== .*Mismatched free\\(\\) / delete / delete \\[\\]");
!   cmsys::RegularExpression vgMLK(
      "== .*[0-9][0-9]* bytes in [0-9][0-9]* blocks are definitely lost"
      " in loss record [0-9][0-9]* of [0-9]");
    cmsys::RegularExpression vgPAR(
--- 660,669 ----
    cmsys::RegularExpression vgFMM(
      "== .*Mismatched free\\(\\) / delete / delete \\[\\]");
!   cmsys::RegularExpression vgMLK1(
      "== .*[0-9][0-9]* bytes in [0-9][0-9]* blocks are definitely lost"
+    " in loss record [0-9][0-9]* of [0-9]");
+   cmsys::RegularExpression vgMLK2(
+     "== .*[0-9][0-9]* \\([0-9]*,?[0-9]* direct, [0-9]*,?[0-9]* indirect\\)"
+         " bytes in [0-9][0-9]* blocks are definitely lost"
      " in loss record [0-9][0-9]* of [0-9]");
    cmsys::RegularExpression vgPAR(
***************
*** 706,710 ****
          failure = cmCTestMemCheckHandler::FMM;
          }
!       else if ( vgMLK.find(lines[cc]) )
          {
          failure = cmCTestMemCheckHandler::MLK;
--- 710,718 ----
          failure = cmCTestMemCheckHandler::FMM;
          }
!       else if ( vgMLK1.find(lines[cc]) )
!         {
!         failure = cmCTestMemCheckHandler::MLK;
!         }
!       else if ( vgMLK2.find(lines[cc]) )
          {
          failure = cmCTestMemCheckHandler::MLK;



More information about the Cmake-commits mailing list