Evgeny Kotkov <evgeny.kot...@visualsvn.com> writes:

> The reason why this error is propagated up the stack is that we only examine
> the 'ignore_enoent' argument after the first apr_file_remove() call.  This is
> racy — if we get a EACCES during the first attempt to remove a file, and the
> file is simultaneously removed from the disk, the next attempt to remove it
> would fail with a ENOENT, even with 'ignore_enoent'.  I think we should
> fix this by suppressing ENOENTs from every apr_file_remove() call, not
> just the first one.

Sounds plausible.

Windows code is tricky.  When svn_io_remove_file2() gets EACCES it calls
svn_io_set_file_read_write() passing ignore_enoent.  That function has
different handling of ignore_enoent as it only checks ENOENT while
svn_io_remove_file2() and checks both ENOENT and ENOTDIR.
svn_io_set_file_read_write() also doesn't have a WIN32_RETRY_LOOP.  Are
those differences intentional?

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*

Reply via email to