summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r--src/core/hle/kernel/readable_event.cpp12
-rw-r--r--src/core/hle/kernel/readable_event.h11
2 files changed, 22 insertions, 1 deletions
diff --git a/src/core/hle/kernel/readable_event.cpp b/src/core/hle/kernel/readable_event.cpp
index 92e16b4e6..ba01f495c 100644
--- a/src/core/hle/kernel/readable_event.cpp
+++ b/src/core/hle/kernel/readable_event.cpp
@@ -4,10 +4,10 @@
4 4
5#include <algorithm> 5#include <algorithm>
6#include "common/assert.h" 6#include "common/assert.h"
7#include "core/hle/kernel/errors.h"
7#include "core/hle/kernel/object.h" 8#include "core/hle/kernel/object.h"
8#include "core/hle/kernel/readable_event.h" 9#include "core/hle/kernel/readable_event.h"
9#include "core/hle/kernel/thread.h" 10#include "core/hle/kernel/thread.h"
10#include "core/hle/kernel/writable_event.h"
11 11
12namespace Kernel { 12namespace Kernel {
13 13
@@ -34,6 +34,16 @@ void ReadableEvent::Clear() {
34 signaled = false; 34 signaled = false;
35} 35}
36 36
37ResultCode ReadableEvent::Reset() {
38 if (!signaled) {
39 return ERR_INVALID_STATE;
40 }
41
42 Clear();
43
44 return RESULT_SUCCESS;
45}
46
37void ReadableEvent::WakeupAllWaitingThreads() { 47void ReadableEvent::WakeupAllWaitingThreads() {
38 WaitObject::WakeupAllWaitingThreads(); 48 WaitObject::WakeupAllWaitingThreads();
39 49
diff --git a/src/core/hle/kernel/readable_event.h b/src/core/hle/kernel/readable_event.h
index 867ff3051..80b3b0aba 100644
--- a/src/core/hle/kernel/readable_event.h
+++ b/src/core/hle/kernel/readable_event.h
@@ -7,6 +7,8 @@
7#include "core/hle/kernel/object.h" 7#include "core/hle/kernel/object.h"
8#include "core/hle/kernel/wait_object.h" 8#include "core/hle/kernel/wait_object.h"
9 9
10union ResultCode;
11
10namespace Kernel { 12namespace Kernel {
11 13
12class KernelCore; 14class KernelCore;
@@ -39,8 +41,17 @@ public:
39 41
40 void WakeupAllWaitingThreads() override; 42 void WakeupAllWaitingThreads() override;
41 43
44 /// Unconditionally clears the readable event's state.
42 void Clear(); 45 void Clear();
43 46
47 /// Clears the readable event's state if and only if it
48 /// has already been signaled.
49 ///
50 /// @pre The event must be in a signaled state. If this event
51 /// is in an unsignaled state and this function is called,
52 /// then ERR_INVALID_STATE will be returned.
53 ResultCode Reset();
54
44private: 55private:
45 explicit ReadableEvent(KernelCore& kernel); 56 explicit ReadableEvent(KernelCore& kernel);
46 57