diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/kernel/address_arbiter.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 4 | 
2 files changed, 5 insertions, 5 deletions
diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp index 352190da8..c8842410b 100644 --- a/src/core/hle/kernel/address_arbiter.cpp +++ b/src/core/hle/kernel/address_arbiter.cpp @@ -26,7 +26,7 @@ void WakeThreads(const std::vector<SharedPtr<Thread>>& waiting_threads, s32 num_      // them all.      std::size_t last = waiting_threads.size();      if (num_to_wake > 0) { -        last = num_to_wake; +        last = std::min(last, static_cast<std::size_t>(num_to_wake));      }      // Signal the waiting threads. @@ -90,9 +90,9 @@ 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; +    } else if (num_to_wake <= 0 || waiting_threads.size() <= static_cast<u32>(num_to_wake)) { +        updated_value = value - 1;      } else {          updated_value = value;      } diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 047fa0c19..d241b65c7 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -1394,10 +1394,10 @@ static ResultCode SignalProcessWideKey(VAddr condition_variable_addr, s32 target      // them all.      std::size_t last = waiting_threads.size();      if (target != -1) -        last = target; +        last = std::min(waiting_threads.size(), static_cast<std::size_t>(target));      // If there are no threads waiting on this condition variable, just exit -    if (last > waiting_threads.size()) +    if (last == 0)          return RESULT_SUCCESS;      for (std::size_t index = 0; index < last; ++index) {  | 
