sys_fs: fix map entry removal in destructor

This commit is contained in:
Megamouse 2023-06-05 22:31:58 +02:00
parent a131a41874
commit 6d2f7f6e54
2 changed files with 5 additions and 5 deletions

View File

@ -145,7 +145,7 @@ lv2_fs_mount_info_map::lv2_fs_mount_info_map()
lv2_fs_mount_info_map::~lv2_fs_mount_info_map()
{
for (const auto& [path, info] : map)
vfs_unmount(path);
vfs_unmount(path, false); // Do not remove the value from the map we are iterating over.
}
bool lv2_fs_mount_info_map::remove(std::string_view path)
@ -220,7 +220,7 @@ u64 lv2_fs_mount_info_map::get_all(CellFsMountInfo* info, u64 len) const
return count;
}
bool lv2_fs_mount_info_map::vfs_unmount(std::string_view vpath)
bool lv2_fs_mount_info_map::vfs_unmount(std::string_view vpath, bool remove_from_map)
{
const std::string local_path = vfs::get(vpath);
@ -239,9 +239,9 @@ bool lv2_fs_mount_info_map::vfs_unmount(std::string_view vpath)
}
}
const auto result = vfs::unmount(vpath);
const bool result = vfs::unmount(vpath);
if (result)
if (result && remove_from_map)
g_fxo->get<lv2_fs_mount_info_map>().remove(vpath);
return result;

View File

@ -216,7 +216,7 @@ public:
const lv2_fs_mount_info& lookup(std::string_view path, bool no_cell_fs_path = false) const;
u64 get_all(CellFsMountInfo* info = nullptr, u64 len = 0) const;
static bool vfs_unmount(std::string_view vpath);
static bool vfs_unmount(std::string_view vpath, bool remove_from_map = true);
private:
std::unordered_map<std::string, lv2_fs_mount_info, fmt::string_hash, std::equal_to<>> map;