Explorar el Código

ENH: Remove memory leak and remember global generator for next time

Andy Cedilnik hace 20 años
padre
commit
0842958977
Se han modificado 2 ficheros con 41 adiciones y 7 borrados
  1. 35 6
      Source/CTest/cmCTestBuildCommand.cxx
  2. 6 1
      Source/CTest/cmCTestBuildCommand.h

+ 35 - 6
Source/CTest/cmCTestBuildCommand.cxx

@@ -21,6 +21,24 @@
 #include "cmake.h"
 #include "cmGlobalGenerator.h"
 
+
+//----------------------------------------------------------------------------
+cmCTestBuildCommand::cmCTestBuildCommand()
+{
+  m_GlobalGenerator = 0;
+}
+
+//----------------------------------------------------------------------------
+cmCTestBuildCommand::~cmCTestBuildCommand()
+{
+  if ( m_GlobalGenerator )
+    {
+    delete m_GlobalGenerator;
+    m_GlobalGenerator = 0;
+    }
+}
+
+//----------------------------------------------------------------------------
 bool cmCTestBuildCommand::InitialPass(
   std::vector<std::string> const& args)
 {
@@ -97,13 +115,24 @@ bool cmCTestBuildCommand::InitialPass(
         {
         cmakeBuildConfiguration = "Release";
         }
-      cmGlobalGenerator* gen = 
-        m_Makefile->GetCMakeInstance()->CreateGlobalGenerator(cmakeGeneratorName);
-      gen->FindMakeProgram(m_Makefile);
+      if ( m_GlobalGenerator )
+        {
+        if ( strcmp(m_GlobalGenerator->GetName(), cmakeGeneratorName) != 0 )
+          {
+          delete m_GlobalGenerator;
+          m_GlobalGenerator = 0;
+          }
+        }
+      if ( !m_GlobalGenerator )
+        {
+        m_GlobalGenerator = 
+          m_Makefile->GetCMakeInstance()->CreateGlobalGenerator(cmakeGeneratorName);
+        }
+      m_GlobalGenerator->FindMakeProgram(m_Makefile);
       const char* cmakeMakeProgram = m_Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
-      std::string buildCommand = gen->GenerateBuildCommand(cmakeMakeProgram, cmakeProjectName,
-        0, cmakeBuildConfiguration, true);
-
+      std::string buildCommand
+        = m_GlobalGenerator->GenerateBuildCommand(cmakeMakeProgram, cmakeProjectName,
+          0, cmakeBuildConfiguration, true);
       m_CTest->SetCTestConfiguration("MakeCommand", buildCommand.c_str());
       }
     else

+ 6 - 1
Source/CTest/cmCTestBuildCommand.h

@@ -19,6 +19,8 @@
 
 #include "cmCTestCommand.h"
 
+class cmGlobalGenerator;
+
 /** \class cmCTestBuild
  * \brief Run a ctest script
  *
@@ -28,7 +30,8 @@ class cmCTestBuildCommand : public cmCTestCommand
 {
 public:
 
-  cmCTestBuildCommand() {}
+  cmCTestBuildCommand();
+  ~cmCTestBuildCommand();
   
   /**
    * This is a virtual constructor for the command.
@@ -71,6 +74,8 @@ public:
     }
 
   cmTypeMacro(cmCTestBuildCommand, cmCTestCommand);
+
+  cmGlobalGenerator* m_GlobalGenerator;
 };