Kernel: pass ref to port
This commit is contained in:
parent
c141657d83
commit
1213a298df
12 changed files with 37 additions and 25 deletions
|
@ -244,7 +244,7 @@ ERR_F::~ERR_F() = default;
|
|||
|
||||
void InstallInterfaces(Core::System& system) {
|
||||
auto errf = std::make_shared<ERR_F>(system);
|
||||
errf->InstallAsNamedPort();
|
||||
errf->InstallAsNamedPort(system.Kernel());
|
||||
}
|
||||
|
||||
} // namespace Service::ERR
|
||||
|
|
|
@ -143,11 +143,11 @@ void ServiceFrameworkBase::InstallAsService(SM::ServiceManager& service_manager)
|
|||
port->SetHleHandler(shared_from_this());
|
||||
}
|
||||
|
||||
void ServiceFrameworkBase::InstallAsNamedPort() {
|
||||
void ServiceFrameworkBase::InstallAsNamedPort(Kernel::KernelSystem& kernel) {
|
||||
ASSERT(port == nullptr);
|
||||
SharedPtr<ServerPort> server_port;
|
||||
SharedPtr<ClientPort> client_port;
|
||||
std::tie(server_port, client_port) = ServerPort::CreatePortPair(max_sessions, service_name);
|
||||
std::tie(server_port, client_port) = kernel.CreatePortPair(max_sessions, service_name);
|
||||
server_port->SetHleHandler(shared_from_this());
|
||||
AddNamedPort(service_name, std::move(client_port));
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ class System;
|
|||
}
|
||||
|
||||
namespace Kernel {
|
||||
class KernelSystem;
|
||||
class ClientPort;
|
||||
class ServerPort;
|
||||
class ServerSession;
|
||||
|
@ -59,7 +60,7 @@ 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();
|
||||
void InstallAsNamedPort(Kernel::KernelSystem& kernel);
|
||||
|
||||
void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) override;
|
||||
|
||||
|
|
|
@ -22,11 +22,13 @@ static ResultCode ValidateServiceName(const std::string& name) {
|
|||
return RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ServiceManager::ServiceManager(Core::System& system) : system(system) {}
|
||||
|
||||
void ServiceManager::InstallInterfaces(Core::System& system) {
|
||||
ASSERT(system.ServiceManager().srv_interface.expired());
|
||||
|
||||
auto srv = std::make_shared<SRV>(system);
|
||||
srv->InstallAsNamedPort();
|
||||
srv->InstallAsNamedPort(system.Kernel());
|
||||
system.ServiceManager().srv_interface = srv;
|
||||
}
|
||||
|
||||
|
@ -40,7 +42,7 @@ ResultVal<Kernel::SharedPtr<Kernel::ServerPort>> ServiceManager::RegisterService
|
|||
|
||||
Kernel::SharedPtr<Kernel::ServerPort> server_port;
|
||||
Kernel::SharedPtr<Kernel::ClientPort> client_port;
|
||||
std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, name);
|
||||
std::tie(server_port, client_port) = system.Kernel().CreatePortPair(max_sessions, name);
|
||||
|
||||
registered_services.emplace(std::move(name), std::move(client_port));
|
||||
return MakeResult<Kernel::SharedPtr<Kernel::ServerPort>>(std::move(server_port));
|
||||
|
|
|
@ -45,6 +45,8 @@ class ServiceManager {
|
|||
public:
|
||||
static void InstallInterfaces(Core::System& system);
|
||||
|
||||
explicit ServiceManager(Core::System& system);
|
||||
|
||||
ResultVal<Kernel::SharedPtr<Kernel::ServerPort>> RegisterService(std::string name,
|
||||
unsigned int max_sessions);
|
||||
ResultVal<Kernel::SharedPtr<Kernel::ClientPort>> GetServicePort(const std::string& name);
|
||||
|
@ -67,6 +69,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
Core::System& system;
|
||||
std::weak_ptr<SRV> srv_interface;
|
||||
|
||||
/// Map of registered services, retrieved using GetServicePort or ConnectToService.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue