summaryrefslogtreecommitdiffstats
path: root/Source/cmCoreTryCompile.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2010-12-03 12:38:15 (GMT)
committerBrad King <brad.king@kitware.com>2010-12-03 12:38:15 (GMT)
commit097294e6670ccfb3e2ca8101dc6468e917042600 (patch)
tree5e82a2657e0653117ac3d92bf985cb03d233cd8e /Source/cmCoreTryCompile.cxx
parentc300ef1c66eafcae3b4ef05f2ec27768feb1e280 (diff)
downloadCMake-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.cxx32
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());
}
}
}