summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/readable_event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/readable_event.cpp')
-rw-r--r--src/core/hle/kernel/readable_event.cpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/core/hle/kernel/readable_event.cpp b/src/core/hle/kernel/readable_event.cpp
index 164cffbdb..92e16b4e6 100644
--- a/src/core/hle/kernel/readable_event.cpp
+++ b/src/core/hle/kernel/readable_event.cpp
@@ -15,34 +15,30 @@ ReadableEvent::ReadableEvent(KernelCore& kernel) : WaitObject{kernel} {}
ReadableEvent::~ReadableEvent() = default;
bool ReadableEvent::ShouldWait(Thread* thread) const {
- return !writable_event->IsSignaled();
+ return !signaled;
}
void ReadableEvent::Acquire(Thread* thread) {
ASSERT_MSG(!ShouldWait(thread), "object unavailable!");
- writable_event->ResetOnAcquire();
-}
-
-void ReadableEvent::AddWaitingThread(SharedPtr<Thread> thread) {
- writable_event->AddWaitingThread(thread);
-}
-
-void ReadableEvent::RemoveWaitingThread(Thread* thread) {
- writable_event->RemoveWaitingThread(thread);
+ if (reset_type == ResetType::OneShot)
+ signaled = false;
}
void ReadableEvent::Signal() {
- writable_event->Signal();
+ signaled = true;
+ WakeupAllWaitingThreads();
}
void ReadableEvent::Clear() {
- writable_event->Clear();
+ signaled = false;
}
void ReadableEvent::WakeupAllWaitingThreads() {
- writable_event->WakeupAllWaitingThreads();
- writable_event->ResetOnWakeup();
+ WaitObject::WakeupAllWaitingThreads();
+
+ if (reset_type == ResetType::Pulse)
+ signaled = false;
}
} // namespace Kernel