summaryrefslogtreecommitdiff
path: root/src/core/hle/service/service.cpp
diff options
context:
space:
mode:
authorGravatar Subv2016-06-18 13:39:26 -0500
committerGravatar Subv2016-11-30 23:04:00 -0500
commitc5e7e0fa26fc793c8b9f3effe25586f7fb57953e (patch)
tree2acac9450de6b1d8cc42d89f9aa08759d77f9cd9 /src/core/hle/service/service.cpp
parentKernel/HLE: Service::Interface no longer inherits from any Kernel object, and... (diff)
downloadyuzu-c5e7e0fa26fc793c8b9f3effe25586f7fb57953e.tar.gz
yuzu-c5e7e0fa26fc793c8b9f3effe25586f7fb57953e.tar.xz
yuzu-c5e7e0fa26fc793c8b9f3effe25586f7fb57953e.zip
IPC/HLE: Associate the ClientSessions with their parent port's HLE interface if it exists.
Pass the triggering ServerSession to the HLE command handler to differentiate which session caused the request.
Diffstat (limited to 'src/core/hle/service/service.cpp')
-rw-r--r--src/core/hle/service/service.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index abfc1806b..56e4f8734 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -61,7 +61,9 @@ static std::string MakeFunctionString(const char* name, const char* port_name,
61 return function_string; 61 return function_string;
62} 62}
63 63
64ResultCode Interface::HandleSyncRequest() { 64ResultCode Interface::HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) {
65 // TODO(Subv): Make use of the server_session in the HLE service handlers to distinguish which session triggered each command.
66
65 u32* cmd_buff = Kernel::GetCommandBuffer(); 67 u32* cmd_buff = Kernel::GetCommandBuffer();
66 auto itr = m_functions.find(cmd_buff[0]); 68 auto itr = m_functions.find(cmd_buff[0]);
67 69
@@ -97,12 +99,12 @@ void Interface::Register(const FunctionInfo* functions, size_t n) {
97// Module interface 99// Module interface
98 100
99static void AddNamedPort(Interface* interface_) { 101static void AddNamedPort(Interface* interface_) {
100 auto client_port = Kernel::ClientPort::CreateForHLE(interface_->GetMaxSessions(), std::unique_ptr<Interface>(interface_)); 102 auto client_port = Kernel::ClientPort::CreateForHLE(interface_->GetMaxSessions(), std::shared_ptr<Interface>(interface_));
101 g_kernel_named_ports.emplace(interface_->GetPortName(), client_port); 103 g_kernel_named_ports.emplace(interface_->GetPortName(), client_port);
102} 104}
103 105
104void AddService(Interface* interface_) { 106void AddService(Interface* interface_) {
105 auto client_port = Kernel::ClientPort::CreateForHLE(interface_->GetMaxSessions(), std::unique_ptr<Interface>(interface_)); 107 auto client_port = Kernel::ClientPort::CreateForHLE(interface_->GetMaxSessions(), std::shared_ptr<Interface>(interface_));
106 g_srv_services.emplace(interface_->GetPortName(), client_port); 108 g_srv_services.emplace(interface_->GetPortName(), client_port);
107} 109}
108 110