Fix bogus file access denied error after listDirectory calls on Windows.

Makes sure that `FindClose` gets called before `listDirectory` returns to avoid a race-condition, where a successive modification of the directory fails with "access denied".
This commit is contained in:
Sönke Ludwig 2020-12-01 19:23:05 +01:00
parent 3d1be3b3cb
commit a9ba6d98cb

View file

@ -375,7 +375,7 @@ void listDirectory(string path, scope bool delegate(FileInfo info) @safe del)
auto ch = createChannel!S();
TaskSettings ts;
ts.priority = 10 * Task.basePriority;
runWorkerTaskH(ioTaskSettings, (string path, Channel!S ch) nothrow {
auto t = runWorkerTaskH(ioTaskSettings, (string path, Channel!S ch) nothrow {
scope (exit) ch.close();
try {
foreach (DirEntry ent; dirEntries(path, SpanMode.shallow)) {
@ -389,6 +389,11 @@ void listDirectory(string path, scope bool delegate(FileInfo info) @safe del)
}
}, path, ch);
scope (exit) {
t.interrupt();
t.joinUninterruptible();
}
S itm;
while (ch.tryConsumeOne(itm)) {
if (itm.error.length)