aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/client_port.cpp
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2016-06-14 18:03:30 -0500
committerSubv <subv2112@gmail.com>2016-11-30 23:02:05 -0500
commit073653e858abf377fd1ebbdb071809c8830ce99d (patch)
treea29e1c1e50d53162ed89cd90e8c069525150392f /src/core/hle/kernel/client_port.cpp
parent68c00ee771791e5975912c4e0d4be0fb5ab6b8fa (diff)
Kernel/IPC: Use Ports and Sessions as the fundamental building block of Inter Process Communication.
All handles obtained via srv::GetServiceHandle or svcConnectToPort are references to ClientSessions. Service modules will wait on the counterpart of those ClientSessions (Called ServerSessions) using svcReplyAndReceive or svcWaitSynchronization[1|N], and will be awoken when a SyncRequest is performed. HLE Interfaces are now ClientPorts which override the HandleSyncRequest virtual member function to perform command handling immediately.
Diffstat (limited to 'src/core/hle/kernel/client_port.cpp')
-rw-r--r--src/core/hle/kernel/client_port.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/core/hle/kernel/client_port.cpp b/src/core/hle/kernel/client_port.cpp
index aedc6f989..5ee7679eb 100644
--- a/src/core/hle/kernel/client_port.cpp
+++ b/src/core/hle/kernel/client_port.cpp
@@ -6,10 +6,17 @@
#include "core/hle/kernel/client_port.h"
#include "core/hle/kernel/kernel.h"
#include "core/hle/kernel/server_port.h"
+#include "core/hle/kernel/server_session.h"
namespace Kernel {
ClientPort::ClientPort() {}
ClientPort::~ClientPort() {}
+void ClientPort::AddWaitingSession(SharedPtr<ServerSession> server_session) {
+ server_port->pending_sessions.push_back(server_session);
+ // Wake the threads waiting on the ServerPort
+ server_port->WakeupAllWaitingThreads();
+}
+
} // namespace