directory_iterator on Windows should free resources when reaching end(), #8

This commit is contained in:
Steffen Schuemann 2019-03-06 06:53:17 +01:00
parent 4966d1b822
commit b98a74ab1d
2 changed files with 14 additions and 0 deletions

View File

@ -4327,6 +4327,8 @@ public:
copyToDirEntry(ec);
}
else {
FindClose(_dirHandle);
_dirHandle = INVALID_HANDLE_VALUE;
_current = filesystem::path();
break;
}

View File

@ -1039,6 +1039,18 @@ TEST_CASE("30.10.13 class directory_iterator", "[filesystem][directory_iterator]
CHECK(iter->file_size() == 1234);
CHECK(++iter == fs::directory_iterator());
}
{
// Issue #8: check if resources are freed when iterator reaches end()
TemporaryDirectory t(TempOpt::change_path);
auto p = fs::path("test/");
fs::create_directory(p);
auto iter = fs::directory_iterator(p);
while (iter != fs::directory_iterator()) {
++iter;
}
CHECK(fs::remove_all(p) == 1);
CHECK_NOTHROW(fs::create_directory(p));
}
}
TEST_CASE("30.10.14 class recursive_directory_iterator", "[filesystem][recursive_directory_iterator]")