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>
|
template <bool create_region_on_fail, bool locking, typename Func>
|
||||||
bool IterateRegions(VAddr cpu_address, size_t size, Func&& func) {
|
bool IterateRegions(VAddr cpu_address, size_t size, Func&& func) {
|
||||||
RENDERER_TRACE;
|
RENDERER_TRACE;
|
||||||
if constexpr (locking) {
|
const auto run = [&]() {
|
||||||
std::shared_lock lock{global_lock};
|
|
||||||
}
|
|
||||||
using FuncReturn = typename std::invoke_result<Func, RegionManager*, u64, size_t>::type;
|
using FuncReturn = typename std::invoke_result<Func, RegionManager*, u64, size_t>::type;
|
||||||
static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
|
static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
|
||||||
std::size_t remaining_size{size};
|
std::size_t remaining_size{size};
|
||||||
|
@ -186,6 +184,13 @@ private:
|
||||||
remaining_size -= copy_amount;
|
remaining_size -= copy_amount;
|
||||||
}
|
}
|
||||||
return false;
|
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>
|
template <bool locking, typename Func>
|
||||||
void ForEachRegion(Func&& func) {
|
void ForEachRegion(Func&& func) {
|
||||||
RENDERER_TRACE;
|
RENDERER_TRACE;
|
||||||
if constexpr (locking) {
|
const auto run = [&]() {
|
||||||
std::shared_lock lock{global_lock};
|
|
||||||
}
|
|
||||||
for (auto& pool : manager_pool) {
|
for (auto& pool : manager_pool) {
|
||||||
for (auto& manager : pool) {
|
for (auto& manager : pool) {
|
||||||
if (manager.GetCpuAddr() != 0) {
|
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) {
|
void CreateRegion(std::size_t page_index) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue