|
Boost : |
From: Vladimir Prus (ghost_at_[hidden])
Date: 2004-03-09 01:55:12
Beman Dawes wrote:
> >What can be done? Basically, adding a mutex for MT build and adding a
> >warning to docs are the variants. Opinions?
>
> There is already a general race-condition warning in the docs. See
> www.boost.org/libs/filesystem/doc/index.htm#Race-condition.
True, I've missed that.
> Even if the filesystem library itself were made thread-safe, the problem
> could still happen because the state of the external file system may be
> altered by some other process or other machine.
>
> Is there a issue with solving your particular problem by either using your
> own mutex, or catching and discarding the exception, or moving the
> create_directory() call to prolog code that is single-threaded?
No issues with those, I only wanted to make sure this problem is known.
After more though, I wonder if create_directories should not swallow
exceptions itself. E.g.
try {
create_directory(ph);
}
catch(const filesystem_error& e) {
if (e.error() == filesystem::already_exists_error)
; // do nothing
else
throw;
}
After all, caller only cares if directory exists, if it was created by
another thread it's ok.
- Volodya
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk