diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-11-27 00:32:52 +0100 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-11-29 14:42:26 +0100 |
commit | a56fc84e7a116681373ab9157193d2b8ae0f29af (patch) | |
tree | 15b327f2ed4c0e4a9a3ddd6a21e462fcfd83ec8a /src/core/hle/kernel/hle_ipc.cpp | |
parent | kernel: Add named event table (diff) | |
download | yuzu-a56fc84e7a116681373ab9157193d2b8ae0f29af.tar yuzu-a56fc84e7a116681373ab9157193d2b8ae0f29af.tar.gz yuzu-a56fc84e7a116681373ab9157193d2b8ae0f29af.tar.bz2 yuzu-a56fc84e7a116681373ab9157193d2b8ae0f29af.tar.lz yuzu-a56fc84e7a116681373ab9157193d2b8ae0f29af.tar.xz yuzu-a56fc84e7a116681373ab9157193d2b8ae0f29af.tar.zst yuzu-a56fc84e7a116681373ab9157193d2b8ae0f29af.zip |
Diffstat (limited to 'src/core/hle/kernel/hle_ipc.cpp')
-rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 68d5376cb..2ffdb2f5b 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp @@ -15,13 +15,14 @@ #include "common/logging/log.h" #include "core/core.h" #include "core/hle/ipc_helpers.h" -#include "core/hle/kernel/event.h" #include "core/hle/kernel/handle_table.h" #include "core/hle/kernel/hle_ipc.h" #include "core/hle/kernel/kernel.h" #include "core/hle/kernel/object.h" #include "core/hle/kernel/process.h" +#include "core/hle/kernel/readable_event.h" #include "core/hle/kernel/server_session.h" +#include "core/hle/kernel/writable_event.h" #include "core/memory.h" namespace Kernel { @@ -36,11 +37,9 @@ void SessionRequestHandler::ClientDisconnected(const SharedPtr<ServerSession>& s boost::range::remove_erase(connected_sessions, server_session); } -SharedPtr<Event> HLERequestContext::SleepClientThread(SharedPtr<Thread> thread, - const std::string& reason, u64 timeout, - WakeupCallback&& callback, - Kernel::SharedPtr<Kernel::Event> event) { - +SharedPtr<WritableEvent> HLERequestContext::SleepClientThread( + SharedPtr<Thread> thread, const std::string& reason, u64 timeout, WakeupCallback&& callback, + SharedPtr<WritableEvent> writable_event, SharedPtr<ReadableEvent> readable_event) { // Put the client thread to sleep until the wait event is signaled or the timeout expires. thread->SetWakeupCallback([context = *this, callback]( ThreadWakeupReason reason, SharedPtr<Thread> thread, @@ -51,23 +50,23 @@ SharedPtr<Event> HLERequestContext::SleepClientThread(SharedPtr<Thread> thread, return true; }); - if (!event) { + auto& kernel = Core::System::GetInstance().Kernel(); + if (!writable_event || !readable_event) { // Create event if not provided - auto& kernel = Core::System::GetInstance().Kernel(); - event = - Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "HLE Pause Event: " + reason); + std::tie(writable_event, readable_event) = WritableEvent::CreateEventPair( + kernel, Kernel::ResetType::OneShot, "HLE Pause Event: " + reason); } - event->Clear(); + writable_event->Clear(); thread->SetStatus(ThreadStatus::WaitHLEEvent); - thread->SetWaitObjects({event}); - event->AddWaitingThread(thread); + thread->SetWaitObjects({readable_event}); + readable_event->AddWaitingThread(thread); if (timeout > 0) { thread->WakeAfterDelay(timeout); } - return event; + return writable_event; } HLERequestContext::HLERequestContext(SharedPtr<Kernel::ServerSession> server_session) |