diff options
author | David Marcec <dmarcecguzman@gmail.com> | 2018-04-26 23:28:54 +0200 |
---|---|---|
committer | David Marcec <dmarcecguzman@gmail.com> | 2018-04-26 23:28:54 +0200 |
commit | 7391741a204d6f25a06132eda214b2199b60a084 (patch) | |
tree | aeeb723744c4563ad608361b82dd938b062a3e09 /src/core/hle/kernel/condition_variable.cpp | |
parent | Added PREPO to logging backend, Removed comments from SaveReportWithUser (diff) | |
parent | Merge pull request #403 from lioncash/common (diff) | |
download | yuzu-7391741a204d6f25a06132eda214b2199b60a084.tar yuzu-7391741a204d6f25a06132eda214b2199b60a084.tar.gz yuzu-7391741a204d6f25a06132eda214b2199b60a084.tar.bz2 yuzu-7391741a204d6f25a06132eda214b2199b60a084.tar.lz yuzu-7391741a204d6f25a06132eda214b2199b60a084.tar.xz yuzu-7391741a204d6f25a06132eda214b2199b60a084.tar.zst yuzu-7391741a204d6f25a06132eda214b2199b60a084.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/condition_variable.cpp | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/src/core/hle/kernel/condition_variable.cpp b/src/core/hle/kernel/condition_variable.cpp deleted file mode 100644 index a786d7f74..000000000 --- a/src/core/hle/kernel/condition_variable.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2018 yuzu emulator team -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include "common/assert.h" -#include "core/hle/kernel/condition_variable.h" -#include "core/hle/kernel/errors.h" -#include "core/hle/kernel/kernel.h" -#include "core/hle/kernel/object_address_table.h" -#include "core/hle/kernel/thread.h" - -namespace Kernel { - -ConditionVariable::ConditionVariable() {} -ConditionVariable::~ConditionVariable() {} - -ResultVal<SharedPtr<ConditionVariable>> ConditionVariable::Create(VAddr guest_addr, - std::string name) { - SharedPtr<ConditionVariable> condition_variable(new ConditionVariable); - - condition_variable->name = std::move(name); - condition_variable->guest_addr = guest_addr; - condition_variable->mutex_addr = 0; - - // Condition variables are referenced by guest address, so track this in the kernel - g_object_address_table.Insert(guest_addr, condition_variable); - - return MakeResult<SharedPtr<ConditionVariable>>(std::move(condition_variable)); -} - -bool ConditionVariable::ShouldWait(Thread* thread) const { - return GetAvailableCount() <= 0; -} - -void ConditionVariable::Acquire(Thread* thread) { - if (GetAvailableCount() <= 0) - return; - - SetAvailableCount(GetAvailableCount() - 1); -} - -ResultCode ConditionVariable::Release(s32 target) { - if (target == -1) { - // When -1, wake up all waiting threads - SetAvailableCount(static_cast<s32>(GetWaitingThreads().size())); - WakeupAllWaitingThreads(); - } else { - // Otherwise, wake up just a single thread - SetAvailableCount(target); - WakeupWaitingThread(GetHighestPriorityReadyThread()); - } - - return RESULT_SUCCESS; -} - -s32 ConditionVariable::GetAvailableCount() const { - return Memory::Read32(guest_addr); -} - -void ConditionVariable::SetAvailableCount(s32 value) const { - Memory::Write32(guest_addr, value); -} - -} // namespace Kernel |