<div dir="ltr">I'll probably just update this to use SHFileOperation which can remove a directory tree in one pass.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Mar 7, 2017 at 9:30 AM Mehdi AMINI via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mehdi_amini added inline comments.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
================<br class="gmail_msg">
Comment at: llvm/lib/Support/Path.cpp:933<br class="gmail_msg">
+<br class="gmail_msg">
+    EC = remove(Item.path());<br class="gmail_msg">
+    if (EC && !IgnoreErrors)<br class="gmail_msg">
----------------<br class="gmail_msg">
amccarth wrote:<br class="gmail_msg">
> This is the usual Posix approach, so I'm concerned it won't be reliable on Windows.<br class="gmail_msg">
><br class="gmail_msg">
> When you delete files from a directory on Windows, they are marked for deletion and actually deleted later, typically milliseconds later, but it can actually be even longer.  So when you try to delete the directory, it may not actually be empty yet.<br class="gmail_msg">
><br class="gmail_msg">
> The correct pattern on Windows is to rename the files out of directory (to some temp location) and then delete them.  The rename, if on the same volume, is synchronous, so you know that the directory is actually empty, even if the delete hasn't happened yet.  Is this what the implementation of remove does on Windows?<br class="gmail_msg">
Windows implementation of remove() here: <a href="https://github.com/llvm-project/llvm-project/blob/master/llvm/lib/Support/Windows/Path.inc#L251" rel="noreferrer" class="gmail_msg" target="_blank">https://github.com/llvm-project/llvm-project/blob/master/llvm/lib/Support/Windows/Path.inc#L251</a><br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D30676" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D30676</a><br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>