mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-12 04:35:56 +00:00
Fix shared locking
This commit is contained in:
parent
35bbe874a9
commit
5d2598c505
1 changed files with 50 additions and 40 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue