mirror of
https://github.com/blender/blender
synced 2026-09-29 04:37:17 +03:00
Cycles: Fix occasional failure in path_create_directories
This PR adds a global mutex to `path_create_directories` to fix a thread-safety issue which can occur when concurrently creating multiple subdirectories with common stems. Pull Request: https://projects.blender.org/blender/blender/pulls/139266
This commit is contained in:
parent
d955ebce30
commit
8dd9aeb11e
1 changed files with 8 additions and 8 deletions
|
|
@ -620,13 +620,9 @@ string path_files_md5_hash(const string &dir)
|
|||
|
||||
static bool create_directories_recursivey(const string &path)
|
||||
{
|
||||
if (path_is_directory(path)) {
|
||||
/* Directory already exists, nothing to do. */
|
||||
return true;
|
||||
}
|
||||
if (path_exists(path)) {
|
||||
/* File exists and it's not a directory. */
|
||||
return false;
|
||||
/* Either directory exists and there is nothing to do, or it's a file and we fail. */
|
||||
return path_is_directory(path);
|
||||
}
|
||||
|
||||
const string parent = path_dirname(path);
|
||||
|
|
@ -638,10 +634,14 @@ static bool create_directories_recursivey(const string &path)
|
|||
|
||||
#ifdef _WIN32
|
||||
wstring path_wc = string_to_wstring(path);
|
||||
return _wmkdir(path_wc.c_str()) == 0;
|
||||
_wmkdir(path_wc.c_str());
|
||||
#else
|
||||
return mkdir(path.c_str(), 0777) == 0;
|
||||
mkdir(path.c_str(), 0777);
|
||||
#endif
|
||||
|
||||
/* If another thread creates this in the meantime mkdir will return an error,
|
||||
* so instead check if the directory exists. */
|
||||
return path_is_directory(path);
|
||||
}
|
||||
|
||||
void path_create_directories(const string &filepath)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue