readable_event.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <algorithm>
  5. #include "common/assert.h"
  6. #include "common/logging/log.h"
  7. #include "core/hle/kernel/errors.h"
  8. #include "core/hle/kernel/k_scheduler.h"
  9. #include "core/hle/kernel/kernel.h"
  10. #include "core/hle/kernel/object.h"
  11. #include "core/hle/kernel/readable_event.h"
  12. #include "core/hle/kernel/thread.h"
  13. namespace Kernel {
  14. ReadableEvent::ReadableEvent(KernelCore& kernel) : KSynchronizationObject{kernel} {}
  15. ReadableEvent::~ReadableEvent() = default;
  16. void ReadableEvent::Signal() {
  17. if (is_signaled) {
  18. return;
  19. }
  20. is_signaled = true;
  21. NotifyAvailable();
  22. }
  23. bool ReadableEvent::IsSignaled() const {
  24. ASSERT(kernel.GlobalSchedulerContext().IsLocked());
  25. return is_signaled;
  26. }
  27. void ReadableEvent::Clear() {
  28. is_signaled = false;
  29. }
  30. ResultCode ReadableEvent::Reset() {
  31. KScopedSchedulerLock lock(kernel);
  32. if (!is_signaled) {
  33. LOG_TRACE(Kernel, "Handle is not signaled! object_id={}, object_type={}, object_name={}",
  34. GetObjectId(), GetTypeName(), GetName());
  35. return ERR_INVALID_STATE;
  36. }
  37. Clear();
  38. return RESULT_SUCCESS;
  39. }
  40. } // namespace Kernel