diff options
author | Brad King <brad.king@kitware.com> | 2010-12-03 12:38:15 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2010-12-03 12:38:15 (GMT) |
commit | 097294e6670ccfb3e2ca8101dc6468e917042600 (patch) | |
tree | 5e82a2657e0653117ac3d92bf985cb03d233cd8e /Source/cmCoreTryCompile.cxx | |
parent | c300ef1c66eafcae3b4ef05f2ec27768feb1e280 (diff) | |
download | CMake-097294e6670ccfb3e2ca8101dc6468e917042600.zip CMake-097294e6670ccfb3e2ca8101dc6468e917042600.tar.gz CMake-097294e6670ccfb3e2ca8101dc6468e917042600.tar.bz2 |
Fix try_compile RemoveFile anti-virus loop (#11503)
Commit 3827991e (...fix...not being able to remove try compile code,
2008-03-26) introduced a loop of RemoveFile attempts to overcome
anti-virus locks on recently created try_compile executables. Fix the
logic in this loop to work when the file is already missing.
Diffstat (limited to 'Source/cmCoreTryCompile.cxx')
-rw-r--r-- | Source/cmCoreTryCompile.cxx | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index b8a0c95..b116204 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -396,28 +396,18 @@ void cmCoreTryCompile::CleanupFiles(const char* binDir) } else { - if(!cmSystemTools::RemoveFile(fullPath.c_str())) + // Sometimes anti-virus software hangs on to new files so we + // cannot delete them immediately. Try a few times. + int tries = 5; + while(!cmSystemTools::RemoveFile(fullPath.c_str()) && + --tries && cmSystemTools::FileExists(fullPath.c_str())) { - bool removed = false; - int numAttempts = 0; - // sometimes anti-virus software hangs on to - // new files and we can not delete them, so try - // 5 times with .5 second delay between tries. - while(!removed && numAttempts < 5) - { - cmSystemTools::Delay(500); - if(cmSystemTools::RemoveFile(fullPath.c_str())) - { - removed = true; - } - numAttempts++; - } - if(!removed) - { - std::string m = "Remove failed on file: "; - m += fullPath; - cmSystemTools::ReportLastSystemError(m.c_str()); - } + cmSystemTools::Delay(500); + } + if(tries == 0) + { + std::string m = "Remove failed on file: " + fullPath; + cmSystemTools::ReportLastSystemError(m.c_str()); } } } |