diff options
| author | Subv <subv2112@gmail.com> | 2016-06-14 18:03:30 -0500 |
|---|---|---|
| committer | Subv <subv2112@gmail.com> | 2016-11-30 23:02:05 -0500 |
| commit | 073653e858abf377fd1ebbdb071809c8830ce99d (patch) | |
| tree | a29e1c1e50d53162ed89cd90e8c069525150392f /src/core/hle/kernel/client_port.cpp | |
| parent | 68c00ee771791e5975912c4e0d4be0fb5ab6b8fa (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.cpp | 7 |
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 |
