Ver Fonte

Kernel: Correct SignalProcessWideKey

When the target is 0, all threads must be processed.
Fernando Sahmkow há 6 anos atrás
pai
commit
2ab41ceff4
1 ficheiros alterados com 2 adições e 6 exclusões
  1. 2 6
      src/core/hle/kernel/svc.cpp

+ 2 - 6
src/core/hle/kernel/svc.cpp

@@ -1649,16 +1649,12 @@ static ResultCode SignalProcessWideKey(Core::System& system, VAddr condition_var
     std::vector<SharedPtr<Thread>> waiting_threads =
         current_process->GetConditionVariableThreads(condition_variable_addr);
 
-    // Only process up to 'target' threads, unless 'target' is -1, in which case process
+    // Only process up to 'target' threads, unless 'target' is less equal 0, in which case process
     // them all.
     std::size_t last = waiting_threads.size();
-    if (target != -1)
+    if (target > 0)
         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 == 0)
-        return RESULT_SUCCESS;
-
     for (std::size_t index = 0; index < last; ++index) {
         auto& thread = waiting_threads[index];