Fix shared locking

This commit is contained in:
Lander Gallastegi 2025-07-07 21:37:43 +02:00
parent 35bbe874a9
commit 5d2598c505

View file

@ -150,9 +150,7 @@ private:
template <bool create_region_on_fail, bool locking, typename Func>
bool IterateRegions(VAddr cpu_address, size_t size, Func&& func) {
RENDERER_TRACE;
if constexpr (locking) {
std::shared_lock lock{global_lock};
}
const auto run = [&]() {
using FuncReturn = typename std::invoke_result<Func, RegionManager*, u64, size_t>::type;
static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
std::size_t remaining_size{size};
@ -186,6 +184,13 @@ private:
remaining_size -= copy_amount;
}
return false;
};
if constexpr (locking) {
std::shared_lock lock{global_lock};
return run();
} else {
return run();
}
}
/**
@ -196,9 +201,7 @@ private:
template <bool locking, typename Func>
void ForEachRegion(Func&& func) {
RENDERER_TRACE;
if constexpr (locking) {
std::shared_lock lock{global_lock};
}
const auto run = [&]() {
for (auto& pool : manager_pool) {
for (auto& manager : pool) {
if (manager.GetCpuAddr() != 0) {
@ -206,6 +209,13 @@ private:
}
}
}
};
if constexpr (locking) {
std::shared_lock lock{global_lock};
run();
} else {
run();
}
}
void CreateRegion(std::size_t page_index) {