summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/object.cpp
diff options
context:
space:
mode:
authorGravatar Lioncash2018-12-03 22:50:16 -0500
committerGravatar Lioncash2018-12-04 02:20:47 -0500
commit5eb057f422ac316cd1b943f6cd00aabc673dc238 (patch)
tree837d0d14341f50cda47b73d5128104980eb1afbc /src/core/hle/kernel/object.cpp
parentMerge pull request #1852 from VPeruS/fix-format-string (diff)
downloadyuzu-5eb057f422ac316cd1b943f6cd00aabc673dc238.tar.gz
yuzu-5eb057f422ac316cd1b943f6cd00aabc673dc238.tar.xz
yuzu-5eb057f422ac316cd1b943f6cd00aabc673dc238.zip
kernel/object: Amend handle types to distinguish between readable and writable events
Two kernel object should absolutely never have the same handle ID type. This can cause incorrect behavior when it comes to retrieving object types from the handle table. In this case it allows converting a WritableEvent into a ReadableEvent and vice-versa, which is undefined behavior, since the object types are not the same. This also corrects ClearEvent() to check both kernel types like the kernel itself does.
Diffstat (limited to 'src/core/hle/kernel/object.cpp')
-rw-r--r--src/core/hle/kernel/object.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/core/hle/kernel/object.cpp b/src/core/hle/kernel/object.cpp
index d87a62bb9..bb1b68778 100644
--- a/src/core/hle/kernel/object.cpp
+++ b/src/core/hle/kernel/object.cpp
@@ -13,7 +13,7 @@ Object::~Object() = default;
13 13
14bool Object::IsWaitable() const { 14bool Object::IsWaitable() const {
15 switch (GetHandleType()) { 15 switch (GetHandleType()) {
16 case HandleType::Event: 16 case HandleType::ReadableEvent:
17 case HandleType::Thread: 17 case HandleType::Thread:
18 case HandleType::Timer: 18 case HandleType::Timer:
19 case HandleType::ServerPort: 19 case HandleType::ServerPort:
@@ -21,6 +21,7 @@ bool Object::IsWaitable() const {
21 return true; 21 return true;
22 22
23 case HandleType::Unknown: 23 case HandleType::Unknown:
24 case HandleType::WritableEvent:
24 case HandleType::SharedMemory: 25 case HandleType::SharedMemory:
25 case HandleType::Process: 26 case HandleType::Process:
26 case HandleType::AddressArbiter: 27 case HandleType::AddressArbiter: