summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
diff options
context:
space:
mode:
authorGravatar Zach Hilman2018-11-29 09:14:12 -0500
committerGravatar Zach Hilman2018-11-29 09:14:20 -0500
commit170d7078507745fee4c8952aa5888108b2b76b91 (patch)
tree6bc3c4cbbe36518a7e9b8e62a6b4042cb420861e /src/core/hle/kernel
parentkernel/event: Reference ReadableEvent from WritableEvent (diff)
downloadyuzu-170d7078507745fee4c8952aa5888108b2b76b91.tar.gz
yuzu-170d7078507745fee4c8952aa5888108b2b76b91.tar.xz
yuzu-170d7078507745fee4c8952aa5888108b2b76b91.zip
hle_ipc: Refactor SleepClientThread to avoid ReadableEvent
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r--src/core/hle/kernel/hle_ipc.cpp6
-rw-r--r--src/core/hle/kernel/hle_ipc.h4
-rw-r--r--src/core/hle/kernel/kernel.cpp2
-rw-r--r--src/core/hle/kernel/writable_event.cpp4
-rw-r--r--src/core/hle/kernel/writable_event.h2
5 files changed, 10 insertions, 8 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index 21fda42d6..61ce7d7e4 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -39,7 +39,7 @@ void SessionRequestHandler::ClientDisconnected(const SharedPtr<ServerSession>& s
39 39
40SharedPtr<WritableEvent> HLERequestContext::SleepClientThread( 40SharedPtr<WritableEvent> HLERequestContext::SleepClientThread(
41 SharedPtr<Thread> thread, const std::string& reason, u64 timeout, WakeupCallback&& callback, 41 SharedPtr<Thread> thread, const std::string& reason, u64 timeout, WakeupCallback&& callback,
42 SharedPtr<WritableEvent> writable_event, SharedPtr<ReadableEvent> readable_event) { 42 SharedPtr<WritableEvent> writable_event) {
43 // Put the client thread to sleep until the wait event is signaled or the timeout expires. 43 // Put the client thread to sleep until the wait event is signaled or the timeout expires.
44 thread->SetWakeupCallback([context = *this, callback]( 44 thread->SetWakeupCallback([context = *this, callback](
45 ThreadWakeupReason reason, SharedPtr<Thread> thread, 45 ThreadWakeupReason reason, SharedPtr<Thread> thread,
@@ -51,14 +51,14 @@ SharedPtr<WritableEvent> HLERequestContext::SleepClientThread(
51 }); 51 });
52 52
53 auto& kernel = Core::System::GetInstance().Kernel(); 53 auto& kernel = Core::System::GetInstance().Kernel();
54 if (!writable_event || !readable_event) { 54 if (!writable_event) {
55 // Create event if not provided 55 // Create event if not provided
56 const auto pair = WritableEvent::CreateEventPair(kernel, Kernel::ResetType::OneShot, 56 const auto pair = WritableEvent::CreateEventPair(kernel, Kernel::ResetType::OneShot,
57 "HLE Pause Event: " + reason); 57 "HLE Pause Event: " + reason);
58 writable_event = pair.writable; 58 writable_event = pair.writable;
59 readable_event = pair.readable;
60 } 59 }
61 60
61 const auto readable_event{writable_event->GetReadableEvent()};
62 writable_event->Clear(); 62 writable_event->Clear();
63 thread->SetStatus(ThreadStatus::WaitHLEEvent); 63 thread->SetStatus(ThreadStatus::WaitHLEEvent);
64 thread->SetWaitObjects({readable_event}); 64 thread->SetWaitObjects({readable_event});
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h
index 557940f11..e5c0610cd 100644
--- a/src/core/hle/kernel/hle_ipc.h
+++ b/src/core/hle/kernel/hle_ipc.h
@@ -122,13 +122,11 @@ public:
122 * was called. 122 * was called.
123 * @param writable_event Event to use to wake up the thread. If unspecified, an event will be 123 * @param writable_event Event to use to wake up the thread. If unspecified, an event will be
124 * created. 124 * created.
125 * @param readable_event Event to be bound to the thread to wake up upon.
126 * @returns Event that when signaled will resume the thread and call the callback function. 125 * @returns Event that when signaled will resume the thread and call the callback function.
127 */ 126 */
128 SharedPtr<WritableEvent> SleepClientThread(SharedPtr<Thread> thread, const std::string& reason, 127 SharedPtr<WritableEvent> SleepClientThread(SharedPtr<Thread> thread, const std::string& reason,
129 u64 timeout, WakeupCallback&& callback, 128 u64 timeout, WakeupCallback&& callback,
130 SharedPtr<WritableEvent> writable_event = nullptr, 129 SharedPtr<WritableEvent> writable_event = nullptr);
131 SharedPtr<ReadableEvent> readable_event = nullptr);
132 130
133 /// Populates this context with data from the requesting process/thread. 131 /// Populates this context with data from the requesting process/thread.
134 ResultCode PopulateFromIncomingCommandBuffer(const HandleTable& handle_table, 132 ResultCode PopulateFromIncomingCommandBuffer(const HandleTable& handle_table,
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 21d7f3483..e441c5bc6 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -17,11 +17,9 @@
17#include "core/hle/kernel/handle_table.h" 17#include "core/hle/kernel/handle_table.h"
18#include "core/hle/kernel/kernel.h" 18#include "core/hle/kernel/kernel.h"
19#include "core/hle/kernel/process.h" 19#include "core/hle/kernel/process.h"
20#include "core/hle/kernel/readable_event.h"
21#include "core/hle/kernel/resource_limit.h" 20#include "core/hle/kernel/resource_limit.h"
22#include "core/hle/kernel/thread.h" 21#include "core/hle/kernel/thread.h"
23#include "core/hle/kernel/timer.h" 22#include "core/hle/kernel/timer.h"
24#include "core/hle/kernel/writable_event.h"
25#include "core/hle/lock.h" 23#include "core/hle/lock.h"
26#include "core/hle/result.h" 24#include "core/hle/result.h"
27 25
diff --git a/src/core/hle/kernel/writable_event.cpp b/src/core/hle/kernel/writable_event.cpp
index 27d7ff734..a58ea6ec8 100644
--- a/src/core/hle/kernel/writable_event.cpp
+++ b/src/core/hle/kernel/writable_event.cpp
@@ -29,6 +29,10 @@ EventPair WritableEvent::CreateEventPair(KernelCore& kernel, ResetType reset_typ
29 return {std::move(readable_event), std::move(writable_event)}; 29 return {std::move(readable_event), std::move(writable_event)};
30} 30}
31 31
32SharedPtr<ReadableEvent> WritableEvent::GetReadableEvent() const {
33 return readable;
34}
35
32ResetType WritableEvent::GetResetType() const { 36ResetType WritableEvent::GetResetType() const {
33 return readable->reset_type; 37 return readable->reset_type;
34} 38}
diff --git a/src/core/hle/kernel/writable_event.h b/src/core/hle/kernel/writable_event.h
index 4357d1b9f..fc57d18d7 100644
--- a/src/core/hle/kernel/writable_event.h
+++ b/src/core/hle/kernel/writable_event.h
@@ -44,6 +44,8 @@ public:
44 return HANDLE_TYPE; 44 return HANDLE_TYPE;
45 } 45 }
46 46
47 SharedPtr<ReadableEvent> GetReadableEvent() const;
48
47 ResetType GetResetType() const; 49 ResetType GetResetType() const;
48 50
49 void Signal(); 51 void Signal();