k_readable_event.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "common/assert.h"
  4. #include "core/hle/kernel/k_event.h"
  5. #include "core/hle/kernel/k_readable_event.h"
  6. #include "core/hle/kernel/k_scheduler.h"
  7. #include "core/hle/kernel/k_thread.h"
  8. #include "core/hle/kernel/kernel.h"
  9. #include "core/hle/kernel/svc_results.h"
  10. namespace Kernel {
  11. KReadableEvent::KReadableEvent(KernelCore& kernel_) : KSynchronizationObject{kernel_} {}
  12. KReadableEvent::~KReadableEvent() = default;
  13. bool KReadableEvent::IsSignaled() const {
  14. ASSERT(kernel.GlobalSchedulerContext().IsLocked());
  15. return is_signaled;
  16. }
  17. void KReadableEvent::Destroy() {
  18. if (parent) {
  19. parent->Close();
  20. }
  21. }
  22. Result KReadableEvent::Signal() {
  23. KScopedSchedulerLock lk{kernel};
  24. if (!is_signaled) {
  25. is_signaled = true;
  26. NotifyAvailable();
  27. }
  28. return ResultSuccess;
  29. }
  30. Result KReadableEvent::Clear() {
  31. Reset();
  32. return ResultSuccess;
  33. }
  34. Result KReadableEvent::Reset() {
  35. KScopedSchedulerLock lk{kernel};
  36. if (!is_signaled) {
  37. return ResultInvalidState;
  38. }
  39. is_signaled = false;
  40. return ResultSuccess;
  41. }
  42. } // namespace Kernel