[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2111-gb1caac7

Brad King brad.king at kitware.com
Tue Feb 12 13:56:42 EST 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  b1caac79288bae0226dbb750f0768dfa26ea90a1 (commit)
       via  2dc17f88dd2de900154f153f521b803ec9b7c377 (commit)
      from  a5fc93d6e49fea7f6651885a6ec42ab78ca7ea8c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b1caac79288bae0226dbb750f0768dfa26ea90a1
commit b1caac79288bae0226dbb750f0768dfa26ea90a1
Merge: a5fc93d 2dc17f8
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 12 13:56:35 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Feb 12 13:56:35 2013 -0500

    Merge topic 'vs-atomic-generated-stamp' into next
    
    2dc17f8 VS: Replace generation timestamp file atomically


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2dc17f88dd2de900154f153f521b803ec9b7c377
commit 2dc17f88dd2de900154f153f521b803ec9b7c377
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 12 10:46:22 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 12 13:55:53 2013 -0500

    VS: Replace generation timestamp file atomically
    
    Since commit 34c882a9 (Allow VS 7 project Rebuild and Solution Rebuild to
    work, 2007-11-10) we use a "CMakeFiles/generated.stamp" and some
    associated files in the build tree to avoid re-running CMake when the
    inputs have not changed but VS has cleaned the outputs it knows about.
    
    When we do not really need to re-run we restore the generated.stamp file.
    The non-re-run case can happen in multiple targets in parallel in VS >= 10
    so we must restore the file atomically to avoid races.  Write the stamp
    file to a random temporary name and then atomically rename it to the real
    stamp file.

diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index d57e981..3071aeb 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -4033,10 +4033,18 @@ static bool cmakeCheckStampFile(const char* stampName)
     }
 
   // The build system is up to date.  The stamp file has been removed
-  // by the VS IDE due to a "rebuild" request.  Just restore it.
-  std::ofstream stamp(stampName);
+  // by the VS IDE due to a "rebuild" request.  Restore it atomically.
+  cmOStringStream stampTempStream;
+  stampTempStream << stampName << ".tmp" << cmSystemTools::RandomSeed();
+  std::string stampTempString = stampTempStream.str();
+  const char* stampTemp = stampTempString.c_str();
+  {
+  // TODO: Teach cmGeneratedFileStream to use a random temp file (with
+  // multiple tries in unlikely case of conflict) and use that here.
+  std::ofstream stamp(stampTemp);
   stamp << "# CMake generation timestamp file this directory.\n";
-  if(stamp)
+  }
+  if(cmSystemTools::RenameFile(stampTemp, stampName))
     {
     // Notify the user why CMake is not re-running.  It is safe to
     // just print to stdout here because this code is only reachable
@@ -4047,6 +4055,7 @@ static bool cmakeCheckStampFile(const char* stampName)
     }
   else
     {
+    cmSystemTools::RemoveFile(stampTemp);
     cmSystemTools::Error("Cannot restore timestamp ", stampName);
     return false;
     }

-----------------------------------------------------------------------

Summary of changes:
 Source/cmake.cxx |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list