|
|
@ -1649,16 +1649,12 @@ static ResultCode SignalProcessWideKey(Core::System& system, VAddr condition_var
|
|
|
|
std::vector<SharedPtr<Thread>> waiting_threads =
|
|
|
|
std::vector<SharedPtr<Thread>> waiting_threads =
|
|
|
|
current_process->GetConditionVariableThreads(condition_variable_addr);
|
|
|
|
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.
|
|
|
|
// them all.
|
|
|
|
std::size_t last = waiting_threads.size();
|
|
|
|
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));
|
|
|
|
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) {
|
|
|
|
for (std::size_t index = 0; index < last; ++index) {
|
|
|
|
auto& thread = waiting_threads[index];
|
|
|
|
auto& thread = waiting_threads[index];
|
|
|
|
|
|
|
|
|
|
|
|