summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-10-07 19:09:57 -0400
committerFernandoS27 <fsahmkow27@gmail.com>2019-10-15 11:55:19 -0400
commit71768571775ff989a577a773574f5f5bdeb14d33 (patch)
treeca91bc1c7cb08c4ecf4f8079ac3755272d482cfb /src
parent44e09e5f21915391672558940842b92e3a64cb1b (diff)
Kernel: Corrections to ModifyByWaitingCountAndSignalToAddressIfEqual
Diffstat (limited to 'src')
-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) {