diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/service.cpp | 14 | ||||
| -rw-r--r-- | src/core/hle/service/service.h | 8 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index d41df3732..d25b80ab0 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp | |||
| @@ -97,29 +97,33 @@ ServiceFrameworkBase::ServiceFrameworkBase(const char* service_name, u32 max_ses | |||
| 97 | ServiceFrameworkBase::~ServiceFrameworkBase() = default; | 97 | ServiceFrameworkBase::~ServiceFrameworkBase() = default; |
| 98 | 98 | ||
| 99 | void ServiceFrameworkBase::InstallAsService(SM::ServiceManager& service_manager) { | 99 | void ServiceFrameworkBase::InstallAsService(SM::ServiceManager& service_manager) { |
| 100 | ASSERT(port == nullptr); | 100 | ASSERT(!port_installed); |
| 101 | port = service_manager.RegisterService(service_name, max_sessions).Unwrap(); | 101 | |
| 102 | auto port = service_manager.RegisterService(service_name, max_sessions).Unwrap(); | ||
| 102 | port->SetHleHandler(shared_from_this()); | 103 | port->SetHleHandler(shared_from_this()); |
| 104 | port_installed = true; | ||
| 103 | } | 105 | } |
| 104 | 106 | ||
| 105 | void ServiceFrameworkBase::InstallAsNamedPort() { | 107 | void ServiceFrameworkBase::InstallAsNamedPort() { |
| 106 | ASSERT(port == nullptr); | 108 | ASSERT(!port_installed); |
| 107 | 109 | ||
| 108 | auto& kernel = Core::System::GetInstance().Kernel(); | 110 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 109 | auto [server_port, client_port] = | 111 | auto [server_port, client_port] = |
| 110 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name); | 112 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name); |
| 111 | server_port->SetHleHandler(shared_from_this()); | 113 | server_port->SetHleHandler(shared_from_this()); |
| 112 | kernel.AddNamedPort(service_name, std::move(client_port)); | 114 | kernel.AddNamedPort(service_name, std::move(client_port)); |
| 115 | port_installed = true; | ||
| 113 | } | 116 | } |
| 114 | 117 | ||
| 115 | Kernel::SharedPtr<Kernel::ClientPort> ServiceFrameworkBase::CreatePort() { | 118 | Kernel::SharedPtr<Kernel::ClientPort> ServiceFrameworkBase::CreatePort() { |
| 116 | ASSERT(port == nullptr); | 119 | ASSERT(!port_installed); |
| 117 | 120 | ||
| 118 | auto& kernel = Core::System::GetInstance().Kernel(); | 121 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 119 | auto [server_port, client_port] = | 122 | auto [server_port, client_port] = |
| 120 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name); | 123 | Kernel::ServerPort::CreatePortPair(kernel, max_sessions, service_name); |
| 121 | port = MakeResult(std::move(server_port)).Unwrap(); | 124 | auto port = MakeResult(std::move(server_port)).Unwrap(); |
| 122 | port->SetHleHandler(shared_from_this()); | 125 | port->SetHleHandler(shared_from_this()); |
| 126 | port_installed = true; | ||
| 123 | return client_port; | 127 | return client_port; |
| 124 | } | 128 | } |
| 125 | 129 | ||
diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 98483ecf1..029533628 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h | |||
| @@ -96,11 +96,9 @@ private: | |||
| 96 | /// Maximum number of concurrent sessions that this service can handle. | 96 | /// Maximum number of concurrent sessions that this service can handle. |
| 97 | u32 max_sessions; | 97 | u32 max_sessions; |
| 98 | 98 | ||
| 99 | /** | 99 | /// Flag to store if a port was already create/installed to detect multiple install attempts, |
| 100 | * Port where incoming connections will be received. Only created when InstallAsService() or | 100 | /// which is not supported. |
| 101 | * InstallAsNamedPort() are called. | 101 | bool port_installed = false; |
| 102 | */ | ||
| 103 | Kernel::SharedPtr<Kernel::ServerPort> port; | ||
| 104 | 102 | ||
| 105 | /// Function used to safely up-cast pointers to the derived class before invoking a handler. | 103 | /// Function used to safely up-cast pointers to the derived class before invoking a handler. |
| 106 | InvokerFn* handler_invoker; | 104 | InvokerFn* handler_invoker; |