Hi Brad,

Thank you for your reply. 
As you pointed out, the problem seems to come from a race condition on the
file "generate.stamp". Now the operations being atomic, the problem should
be solved, in practice.

However, I do not fully understand in what extent the atomicity of renaming
a file would solve this. The log says:
"Write the stamp file to a random temporary name and then atomically rename
it to the real stamp file."

The operations take basically less time; hence the problem should occur
less. However:
- process 1 is accessing generate.stamp for reading
- process 2 is moving some "tmpfile" to generate.stamp -> race

The probability of race increases with the number of projects in
CMakeList.txt (since they share "generate.stamp") and the number of cores
used for building (and of course the structure and dependencies among the
projects). 

What if, in .\Source\cmLocalVisualStudio7Generator.cxx, we replace:

cmSourceFile* cmLocalVisualStudio7Generator::CreateVCProjBuildRule()
{
  std::string stampName = this->Makefile->GetCurrentOutputDirectory();
  stampName += "/";
  stampName += cmake::GetCMakeFilesDirectoryPostSlash();
  stampName += "generate.stamp";
  const char* dsprule =
    this->Makefile->GetRequiredDefinition("CMAKE_COMMAND");

by

cmSourceFile* cmLocalVisualStudio7Generator::CreateVCProjBuildRule()
{
  std::string stampName = this->Makefile->GetCurrentOutputDirectory();
  stampName += "/";
  stampName += cmake::GetCMakeFilesDirectoryPostSlash();
  stampName += std::string(this->Makefile->GetProjectName()) +
"_generate.stamp";
  const char* dsprule =
    this->Makefile->GetRequiredDefinition("CMAKE_COMMAND");


I do not know the code that much, but I guess "Makefile::SetProjectName" is
called much earlier than
cmLocalVisualStudio7Generator::CreateVCProjBuildRule, right?
What do you think?

Best,
Raffi Enficiaud


-----Original Message-----
From: Brad King [mailto:brad.k...@kitware.com] 
Sent: lundi 29 avril 2013 18:56
To: Raffi Enficiaud
Cc: cmake@cmake.org
Subject: Re: [CMake] "Cannot restore timestamp" error on Windows

On 04/29/2013 10:53 AM, Raffi Enficiaud wrote:
> I read the content of the change in the link you provided, and I have 
> a newbie question:
> Why not using one timestamp (different filename) per
library/binary/project? 

The current approach evolved historically.  A per-target approach would
probably work too but things should be working now anyway.

> Looking forward to having this issue solved in the next official release!

It is already solved in 2.8.11-rc*.

-Brad

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to