k_readable_event.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2021 yuzu emulator team
  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/common_funcs.h"
  7. #include "common/logging/log.h"
  8. #include "core/hle/kernel/k_readable_event.h"
  9. #include "core/hle/kernel/k_scheduler.h"
  10. #include "core/hle/kernel/k_thread.h"
  11. #include "core/hle/kernel/kernel.h"
  12. #include "core/hle/kernel/object.h"
  13. #include "core/hle/kernel/svc_results.h"
  14. namespace Kernel {
  15. KReadableEvent::KReadableEvent(KernelCore& kernel, std::string&& name)
  16. : KSynchronizationObject{kernel, std::move(name)} {}
  17. KReadableEvent::~KReadableEvent() = default;
  18. bool KReadableEvent::IsSignaled() const {
  19. ASSERT(kernel.GlobalSchedulerContext().IsLocked());
  20. return is_signaled;
  21. }
  22. ResultCode KReadableEvent::Signal() {
  23. KScopedSchedulerLock lk{kernel};
  24. if (!is_signaled) {
  25. is_signaled = true;
  26. NotifyAvailable();
  27. }
  28. return RESULT_SUCCESS;
  29. }
  30. ResultCode KReadableEvent::Clear() {
  31. Reset();
  32. return RESULT_SUCCESS;
  33. }
  34. ResultCode KReadableEvent::Reset() {
  35. KScopedSchedulerLock lk{kernel};
  36. if (!is_signaled) {
  37. return ResultInvalidState;
  38. }
  39. is_signaled = false;
  40. return RESULT_SUCCESS;
  41. }
  42. } // namespace Kernel