summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-10-08 01:09:57 +0200
committerFernandoS27 <fsahmkow27@gmail.com>2019-10-15 17:55:19 +0200
commit71768571775ff989a577a773574f5f5bdeb14d33 (patch)
treeca91bc1c7cb08c4ecf4f8079ac3755272d482cfb
parentKernel: Correct Results in Condition Variables and Mutexes (diff)
downloadyuzu-71768571775ff989a577a773574f5f5bdeb14d33.tar
yuzu-71768571775ff989a577a773574f5f5bdeb14d33.tar.gz
yuzu-71768571775ff989a577a773574f5f5bdeb14d33.tar.bz2
yuzu-71768571775ff989a577a773574f5f5bdeb14d33.tar.lz
yuzu-71768571775ff989a577a773574f5f5bdeb14d33.tar.xz
yuzu-71768571775ff989a577a773574f5f5bdeb14d33.tar.zst
yuzu-71768571775ff989a577a773574f5f5bdeb14d33.zip
-rw-r--r--src/core/hle/kernel/address_arbiter.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp
index 4c1d3fd18..de0a9064e 100644
--- a/src/core/hle/kernel/address_arbiter.cpp
+++ b/src/core/hle/kernel/address_arbiter.cpp
@@ -91,12 +91,20 @@ ResultCode AddressArbiter::ModifyByWaitingCountAndSignalToAddressIfEqual(VAddr a
// Determine the modified value depending on the waiting count.
s32 updated_value;
- if (waiting_threads.empty()) {
- updated_value = value + 1;
- } else if (num_to_wake <= 0 || waiting_threads.size() <= static_cast<u32>(num_to_wake)) {
- updated_value = value - 1;
+ if (num_to_wake <= 0) {
+ if (waiting_threads.empty()) {
+ updated_value = value + 1;
+ } else {
+ updated_value = value - 1;
+ }
} else {
- updated_value = value;
+ if (waiting_threads.empty()) {
+ updated_value = value + 1;
+ } else if (waiting_threads.size() <= static_cast<u32>(num_to_wake)) {
+ updated_value = value - 1;
+ } else {
+ updated_value = value;
+ }
}
if (static_cast<s32>(Memory::Read32(address)) != value) {