k_readable_event.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Copyright 2021 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "common/assert.h"
  5. #include "core/hle/kernel/k_event.h"
  6. #include "core/hle/kernel/k_readable_event.h"
  7. #include "core/hle/kernel/k_scheduler.h"
  8. #include "core/hle/kernel/k_thread.h"
  9. #include "core/hle/kernel/kernel.h"
  10. #include "core/hle/kernel/svc_results.h"
  11. namespace Kernel {
  12. KReadableEvent::KReadableEvent(KernelCore& kernel) : KSynchronizationObject{kernel} {}
  13. KReadableEvent::~KReadableEvent() = default;
  14. bool KReadableEvent::IsSignaled() const {
  15. ASSERT(kernel.GlobalSchedulerContext().IsLocked());
  16. return is_signaled;
  17. }
  18. void KReadableEvent::Destroy() {
  19. if (parent) {
  20. parent->Close();
  21. }
  22. }
  23. ResultCode KReadableEvent::Signal() {
  24. KScopedSchedulerLock lk{kernel};
  25. if (!is_signaled) {
  26. is_signaled = true;
  27. NotifyAvailable();
  28. }
  29. return RESULT_SUCCESS;
  30. }
  31. ResultCode KReadableEvent::Clear() {
  32. Reset();
  33. return RESULT_SUCCESS;
  34. }
  35. ResultCode KReadableEvent::Reset() {
  36. KScopedSchedulerLock lk{kernel};
  37. if (!is_signaled) {
  38. return ResultInvalidState;
  39. }
  40. is_signaled = false;
  41. return RESULT_SUCCESS;
  42. }
  43. } // namespace Kernel