[orbis-kernel] impi: implement create server/client/session

This commit is contained in:
DH 2023-11-11 02:55:00 +03:00
parent 37295c16a1
commit 8e376c465e
7 changed files with 408 additions and 64 deletions

View file

@ -116,14 +116,22 @@ public:
return {};
}
std::pair<IpmiServer *, bool> createIpmiServer(utils::kstring name) {
std::pair<Ref<IpmiServer>, ErrorCode> createIpmiServer(utils::kstring name) {
std::lock_guard lock(m_sem_mtx);
auto [it, inserted] = mIpmiServers.try_emplace(std::move(name), nullptr);
if (inserted) {
it->second = knew<IpmiServer>(it->first);
if (!inserted) {
return {it->second, ErrorCode::EXIST};
}
return {it->second.get(), inserted};
it->second = knew<IpmiServer>(it->first);
if (it->second == nullptr) {
mIpmiServers.erase(it);
return {nullptr, ErrorCode::NOMEM};
}
return {it->second, {}};
}
Ref<IpmiServer> findIpmiServer(std::string_view name) {