diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2001-06-04 14:18:03 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2001-06-04 14:18:03 (GMT) |
commit | a3cfcd9894a5d626b8beba80fc8b5934ea3f46cf (patch) | |
tree | 73155ed903d3138946d64f4da4631954c8601b4e /Source | |
parent | abab6bc00069df6ff1988abced39b98ea199febc (diff) | |
download | CMake-a3cfcd9894a5d626b8beba80fc8b5934ea3f46cf.zip CMake-a3cfcd9894a5d626b8beba80fc8b5934ea3f46cf.tar.gz CMake-a3cfcd9894a5d626b8beba80fc8b5934ea3f46cf.tar.bz2 |
BUG: clean up memory leaks.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/MFCDialog/CMakeSetupDialog.cpp | 12 | ||||
-rw-r--r-- | Source/cmCacheManager.cxx | 12 | ||||
-rw-r--r-- | Source/cmDSWMakefile.cxx | 15 | ||||
-rw-r--r-- | Source/cmDSWWriter.cxx | 15 | ||||
-rw-r--r-- | Source/cmFunctionBlocker.h | 2 | ||||
-rw-r--r-- | Source/cmMSProjectGenerator.cxx | 4 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 21 | ||||
-rw-r--r-- | Source/cmMakefileGenerator.h | 1 |
8 files changed, 74 insertions, 8 deletions
diff --git a/Source/MFCDialog/CMakeSetupDialog.cpp b/Source/MFCDialog/CMakeSetupDialog.cpp index 0505e50..d6819eb 100644 --- a/Source/MFCDialog/CMakeSetupDialog.cpp +++ b/Source/MFCDialog/CMakeSetupDialog.cpp @@ -219,6 +219,17 @@ int CALLBACK CMakeSetupDialog_SetSelProc( HWND hWnd, UINT uMsg, return 0; } +inline void ILFree(LPITEMIDLIST pidl) +{ + LPMALLOC pMalloc; + if (pidl) + { + SHGetMalloc(&pMalloc); + pMalloc->Free( pidl); + pMalloc->Release(); + } +} + // Browse button bool CMakeSetupDialog::Browse(CString &result, const char *title) @@ -243,6 +254,7 @@ bool CMakeSetupDialog::Browse(CString &result, const char *title) { result = szPathName; } + ILFree(pidl); return bSuccess; } diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx index d183e23..b28ec3e 100644 --- a/Source/cmCacheManager.cxx +++ b/Source/cmCacheManager.cxx @@ -70,12 +70,24 @@ cmCacheManager::CacheEntryType cmCacheManager::StringToType(const char* s) } +struct CleanUpCacheManager +{ + ~CleanUpCacheManager() + { + delete cmCacheManager::GetInstance(); + } + void Use() {} +}; + +CleanUpCacheManager cleanup; + cmCacheManager* cmCacheManager::s_Instance = 0; cmCacheManager* cmCacheManager::GetInstance() { if(!cmCacheManager::s_Instance) { + cleanup.Use(); cmCacheManager::s_Instance = new cmCacheManager; } return cmCacheManager::s_Instance; diff --git a/Source/cmDSWMakefile.cxx b/Source/cmDSWMakefile.cxx index cd3feb7..0823869 100644 --- a/Source/cmDSWMakefile.cxx +++ b/Source/cmDSWMakefile.cxx @@ -96,7 +96,6 @@ void cmDSWMakefile::WriteDSWFile(std::ostream& fout) // add a special target that depends on ALL projects for easy build // of Debug only m_Makefile->AddUtilityCommand("ALL_BUILD", "echo \"Build all projects\"", false); - m_Makefile->FindSubDirectoryCMakeListsFiles(allListFiles); // For each cmMakefile, create a DSP for it, and // add it to this DSW file @@ -104,8 +103,18 @@ void cmDSWMakefile::WriteDSWFile(std::ostream& fout) k != allListFiles.end(); ++k) { cmMakefile* mf = *k; - // Create an MS generator with DSW off, so it only creates dsp files - cmMSProjectGenerator* pg = new cmMSProjectGenerator; + cmMSProjectGenerator* pg = 0; + // if not this makefile, then create a new generator + if(m_Makefile != mf) + { + // Create an MS generator with DSW off, so it only creates dsp files + pg = new cmMSProjectGenerator; + } + else + { + pg = (cmMSProjectGenerator*)m_Makefile->GetMakefileGenerator(); + } + // make sure the generator is building dsp files pg->BuildDSWOff(); mf->SetMakefileGenerator(pg); mf->GenerateMakefile(); diff --git a/Source/cmDSWWriter.cxx b/Source/cmDSWWriter.cxx index cd3feb7..0823869 100644 --- a/Source/cmDSWWriter.cxx +++ b/Source/cmDSWWriter.cxx @@ -96,7 +96,6 @@ void cmDSWMakefile::WriteDSWFile(std::ostream& fout) // add a special target that depends on ALL projects for easy build // of Debug only m_Makefile->AddUtilityCommand("ALL_BUILD", "echo \"Build all projects\"", false); - m_Makefile->FindSubDirectoryCMakeListsFiles(allListFiles); // For each cmMakefile, create a DSP for it, and // add it to this DSW file @@ -104,8 +103,18 @@ void cmDSWMakefile::WriteDSWFile(std::ostream& fout) k != allListFiles.end(); ++k) { cmMakefile* mf = *k; - // Create an MS generator with DSW off, so it only creates dsp files - cmMSProjectGenerator* pg = new cmMSProjectGenerator; + cmMSProjectGenerator* pg = 0; + // if not this makefile, then create a new generator + if(m_Makefile != mf) + { + // Create an MS generator with DSW off, so it only creates dsp files + pg = new cmMSProjectGenerator; + } + else + { + pg = (cmMSProjectGenerator*)m_Makefile->GetMakefileGenerator(); + } + // make sure the generator is building dsp files pg->BuildDSWOff(); mf->SetMakefileGenerator(pg); mf->GenerateMakefile(); diff --git a/Source/cmFunctionBlocker.h b/Source/cmFunctionBlocker.h index 5c8c70d..3891ff1 100644 --- a/Source/cmFunctionBlocker.h +++ b/Source/cmFunctionBlocker.h @@ -72,6 +72,8 @@ public: * regular CMakeList file */ virtual void ScopeEnded(const cmMakefile &mf) const {} + + virtual ~cmFunctionBlocker() {} }; #endif diff --git a/Source/cmMSProjectGenerator.cxx b/Source/cmMSProjectGenerator.cxx index 12e2733..7ac4106 100644 --- a/Source/cmMSProjectGenerator.cxx +++ b/Source/cmMSProjectGenerator.cxx @@ -54,11 +54,15 @@ void cmMSProjectGenerator::GenerateMakefile() { if(m_BuildDSW) { + delete m_DSWMakefile; + m_DSWMakefile = 0; m_DSWMakefile = new cmDSWMakefile(m_Makefile); m_DSWMakefile->OutputDSWFile(); } else { + delete m_DSPMakefile; + m_DSPMakefile = 0; m_DSPMakefile = new cmDSPMakefile(m_Makefile); m_DSPMakefile->OutputDSPFile(); } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 134fdf9..446729e 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -111,6 +111,14 @@ cmMakefile::~cmMakefile() delete d->second; } } + std::set<cmFunctionBlocker *>::const_iterator pos; + for (pos = m_FunctionBlockers.begin(); + pos != m_FunctionBlockers.end(); ++pos) + { + cmFunctionBlocker* b = *pos; + m_FunctionBlockers.erase(*pos); + delete b; + } delete m_MakefileGenerator; } @@ -189,7 +197,10 @@ bool cmMakefile::ReadListFile(const char* filename, const char* external) // keep track of the current file being read if (filename) { - m_cmCurrentListFile= filename; + if(m_cmCurrentListFile != filename) + { + m_cmCurrentListFile = filename; + } } // if this is not a remote makefile @@ -342,6 +353,10 @@ void cmMakefile::AddCommand(cmCommand* wg) // Set the make file void cmMakefile::SetMakefileGenerator(cmMakefileGenerator* mf) { + if(mf == m_MakefileGenerator) + { + return; + } delete m_MakefileGenerator; m_MakefileGenerator = mf; mf->SetMakefile(this); @@ -836,7 +851,7 @@ bool cmMakefile::IsFunctionBlocked(const char *name, } void cmMakefile::RemoveFunctionBlocker(const char *name, - const std::vector<std::string> &args) + const std::vector<std::string> &args) { // loop over all function blockers to see if any block this command std::set<cmFunctionBlocker *>::const_iterator pos; @@ -845,7 +860,9 @@ void cmMakefile::RemoveFunctionBlocker(const char *name, { if ((*pos)->ShouldRemove(name, args, *this)) { + cmFunctionBlocker* b = *pos; m_FunctionBlockers.erase(*pos); + delete b; return; } } diff --git a/Source/cmMakefileGenerator.h b/Source/cmMakefileGenerator.h index a44e62b..688d31f 100644 --- a/Source/cmMakefileGenerator.h +++ b/Source/cmMakefileGenerator.h @@ -82,6 +82,7 @@ public: */ virtual void ComputeSystemInfo() = 0; + virtual ~cmMakefileGenerator(){}; protected: cmMakefile* m_Makefile; }; |