diff options
author | bunnei <bunneidev@gmail.com> | 2021-01-30 07:48:06 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2021-02-05 23:00:36 +0100 |
commit | e86a7e36912b6f3fc64a594338d3c1ac768e3bb8 (patch) | |
tree | 28c2d60179f1f4f798b5a572af2f8c6685fa4940 /src/core/hle/kernel/k_readable_event.cpp | |
parent | Merge pull request #5867 from Morph1984/am-GetHealthWarningDisappearedSystemEvent (diff) | |
download | yuzu-e86a7e36912b6f3fc64a594338d3c1ac768e3bb8.tar yuzu-e86a7e36912b6f3fc64a594338d3c1ac768e3bb8.tar.gz yuzu-e86a7e36912b6f3fc64a594338d3c1ac768e3bb8.tar.bz2 yuzu-e86a7e36912b6f3fc64a594338d3c1ac768e3bb8.tar.lz yuzu-e86a7e36912b6f3fc64a594338d3c1ac768e3bb8.tar.xz yuzu-e86a7e36912b6f3fc64a594338d3c1ac768e3bb8.tar.zst yuzu-e86a7e36912b6f3fc64a594338d3c1ac768e3bb8.zip |
Diffstat (limited to 'src/core/hle/kernel/k_readable_event.cpp')
-rw-r--r-- | src/core/hle/kernel/k_readable_event.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_readable_event.cpp b/src/core/hle/kernel/k_readable_event.cpp new file mode 100644 index 000000000..e9e191bc6 --- /dev/null +++ b/src/core/hle/kernel/k_readable_event.cpp @@ -0,0 +1,52 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <algorithm> +#include "common/assert.h" +#include "common/logging/log.h" +#include "core/hle/kernel/errors.h" +#include "core/hle/kernel/k_readable_event.h" +#include "core/hle/kernel/k_scheduler.h" +#include "core/hle/kernel/k_thread.h" +#include "core/hle/kernel/kernel.h" +#include "core/hle/kernel/object.h" + +namespace Kernel { + +KReadableEvent::KReadableEvent(KernelCore& kernel) : KSynchronizationObject{kernel} {} +KReadableEvent::~KReadableEvent() = default; + +void KReadableEvent::Signal() { + if (is_signaled) { + return; + } + + is_signaled = true; + NotifyAvailable(); +} + +bool KReadableEvent::IsSignaled() const { + ASSERT(kernel.GlobalSchedulerContext().IsLocked()); + + return is_signaled; +} + +void KReadableEvent::Clear() { + is_signaled = false; +} + +ResultCode KReadableEvent::Reset() { + KScopedSchedulerLock lock(kernel); + if (!is_signaled) { + LOG_TRACE(Kernel, "Handle is not signaled! object_id={}, object_type={}, object_name={}", + GetObjectId(), GetTypeName(), GetName()); + return ERR_INVALID_STATE; + } + + Clear(); + + return RESULT_SUCCESS; +} + +} // namespace Kernel |