DescriptionFix race in directory creation on Windows. The
file_util::CreateDirectory() function is supposed to succeed if the
directory already exists, but in the previous implementation when two
processes/threads called the function at the same time for the same
path, one would see a failure.
Also, get rid of the use of SHCreateDirectoryEx function. For one, it
is highly serializing because it calls SHChangeNotify. The race was
actually easy to reproduce by starting two instances of Chrome both at
the same time, with a profile directory flag indicating a profile
directory that did not previously exist.
For another, SHCreateDirectoryEx would fail with ERROR_CANCELLED if
any of the path components were not visible, according to its MSDN
documentation.
BUG=none
TEST=[base_unittests.exe --gtest_filter=*CreateDirectory* ], and/or install Chrome Frame on a fresh machine and make sure the first page you navigate to has two Chrome Frame instances on it - you should get no DCHECK on failure of PathService::Override
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=33225
Patch Set 1 #
Total comments: 2
Patch Set 2 : '' #
Messages
Total messages: 5 (0 generated)
|