hle: kernel: Implement named service ports using service interface factory.
- This allows us to create a new interface each time ConnectToNamedPort is called, removing the assumption that these are static.
This commit is contained in:
parent
44c763f9c6
commit
c6de9657be
4 changed files with 30 additions and 22 deletions
|
@ -111,7 +111,7 @@ void ServiceFrameworkBase::InstallAsService(SM::ServiceManager& service_manager)
|
|||
port_installed = true;
|
||||
}
|
||||
|
||||
void ServiceFrameworkBase::InstallAsNamedPort(Kernel::KernelCore& kernel) {
|
||||
Kernel::KClientPort& ServiceFrameworkBase::CreatePort(Kernel::KernelCore& kernel) {
|
||||
const auto guard = LockService();
|
||||
|
||||
ASSERT(!port_installed);
|
||||
|
@ -119,9 +119,10 @@ void ServiceFrameworkBase::InstallAsNamedPort(Kernel::KernelCore& kernel) {
|
|||
auto* port = Kernel::KPort::Create(kernel);
|
||||
port->Initialize(max_sessions, false, service_name);
|
||||
port->GetServerPort().SetHleHandler(shared_from_this());
|
||||
kernel.AddNamedPort(service_name, &port->GetClientPort());
|
||||
|
||||
port_installed = true;
|
||||
|
||||
return port->GetClientPort();
|
||||
}
|
||||
|
||||
void ServiceFrameworkBase::RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n) {
|
||||
|
|
|
@ -64,10 +64,12 @@ public:
|
|||
|
||||
/// Creates a port pair and registers this service with the given ServiceManager.
|
||||
void InstallAsService(SM::ServiceManager& service_manager);
|
||||
/// Creates a port pair and registers it on the kernel's global port registry.
|
||||
void InstallAsNamedPort(Kernel::KernelCore& kernel);
|
||||
/// Invokes a service request routine.
|
||||
|
||||
/// Invokes a service request routine using the HIPC protocol.
|
||||
void InvokeRequest(Kernel::HLERequestContext& ctx);
|
||||
/// Creates a port pair and registers it on the kernel's global port registry.
|
||||
Kernel::KClientPort& CreatePort(Kernel::KernelCore& kernel);
|
||||
|
||||
/// Handles a synchronization request for the service.
|
||||
ResultCode HandleSyncRequest(Kernel::HLERequestContext& context) override;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue