k_readable_event.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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/errors.h"
  9. #include "core/hle/kernel/k_readable_event.h"
  10. #include "core/hle/kernel/k_scheduler.h"
  11. #include "core/hle/kernel/k_thread.h"
  12. #include "core/hle/kernel/kernel.h"
  13. #include "core/hle/kernel/object.h"
  14. #include "core/hle/kernel/svc_results.h"
  15. namespace Kernel {
  16. KReadableEvent::KReadableEvent(KernelCore& kernel, std::string&& name)
  17. : KSynchronizationObject{kernel, std::move(name)} {}
  18. KReadableEvent::~KReadableEvent() = default;
  19. bool KReadableEvent::IsSignaled() const {
  20. ASSERT(kernel.GlobalSchedulerContext().IsLocked());
  21. return is_signaled;
  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 Svc::ResultInvalidState;
  39. }
  40. is_signaled = false;
  41. return RESULT_SUCCESS;
  42. }
  43. } // namespace Kernel