Prechádzať zdrojové kódy

Remove memory leak caused by cmDynamicLoader not being deleted properly

Ken Martin 23 rokov pred
rodič
commit
cceb68f2a0
2 zmenil súbory, kde vykonal 15 pridanie a 4 odobranie
  1. 2 3
      Source/cmDynamicLoader.cxx
  2. 13 1
      Source/cmaketest.cxx

+ 2 - 3
Source/cmDynamicLoader.cxx

@@ -77,8 +77,6 @@ bool cmDynamicLoaderCache::FlushCache(const char* path)
     m_CacheMap.erase(it);
     ret = true;
     }
-  delete cmDynamicLoaderCache::Instance;
-  cmDynamicLoaderCache::Instance = 0;
   return ret;
 }
 
@@ -89,7 +87,8 @@ void cmDynamicLoaderCache::FlushCache()
     {
     cmDynamicLoader::CloseLibrary(it->second);
     }
-  m_CacheMap.erase(m_CacheMap.begin(), m_CacheMap.end());
+  delete cmDynamicLoaderCache::Instance;
+  cmDynamicLoaderCache::Instance = 0;
 }
 
 cmDynamicLoaderCache* cmDynamicLoaderCache::GetInstance()

+ 13 - 1
Source/cmaketest.cxx

@@ -20,13 +20,25 @@
 #include "cmake.h"
 #include "cmListFileCache.h"
 #include "cmCacheManager.h"
+#include "cmDynamicLoader.h"
 #if defined(_WIN32) && !defined(__CYGWIN__) 
 #include "windows.h"
 #endif
 
+int do_cmaketest(int ac, char** av);
+
+int main(int ac, char** av)
+{
+  int ret = do_cmaketest(ac, av);
+#ifdef CMAKE_BUILD_WITH_CMAKE
+  cmDynamicLoader::FlushCache();
+#endif
+  cmListFileCache::GetInstance()->ClearCache(); 
+  return ret;
+}
 
 // this is a test driver program for cmake.
-int main (int argc, char **argv)
+int do_cmaketest (int argc, char **argv)
 {
   if (argc < 4)
     {