SenseApiMgr: Refcount device spec objects

This commit is contained in:
2025-08-29 09:50:26 -04:00
parent cd63593ae5
commit f3f2384f9b
5 changed files with 42 additions and 25 deletions
+12 -8
View File
@@ -231,14 +231,16 @@ void SenseApiManager::finalizeAllSenseApiLibs(void)
}
}
void SenseApiManager::attachSenseDevice(const device::SenseDeviceSpec& spec)
void SenseApiManager::attachSenseDevice(
const std::shared_ptr<device::SenseDeviceSpec>& spec
)
{
auto libOpt = getSenseApiLibByApiName(spec.api);
auto libOpt = getSenseApiLibByApiName(spec->api);
if (!libOpt)
{
throw std::runtime_error(
std::string(__func__) + ": No library found for API '"
+ spec.api + "'");
+ spec->api + "'");
}
auto& lib = libOpt.value().get();
if (!lib.senseApiDesc.sal_mgmt_libOps.attachDeviceReq)
@@ -250,14 +252,16 @@ void SenseApiManager::attachSenseDevice(const device::SenseDeviceSpec& spec)
lib.senseApiDesc.sal_mgmt_libOps.attachDeviceReq(spec);
}
void SenseApiManager::detachSenseDevice(const device::SenseDeviceSpec& spec)
void SenseApiManager::detachSenseDevice(
const std::shared_ptr<device::SenseDeviceSpec>& spec
)
{
auto libOpt = getSenseApiLibByApiName(spec.api);
auto libOpt = getSenseApiLibByApiName(spec->api);
if (!libOpt)
{
throw std::runtime_error(
std::string(__func__) + ": No library found for API '"
+ spec.api + "'");
+ spec->api + "'");
}
auto& lib = libOpt.value().get();
if (!lib.senseApiDesc.sal_mgmt_libOps.detachDeviceReq)
@@ -272,14 +276,14 @@ void SenseApiManager::detachSenseDevice(const device::SenseDeviceSpec& spec)
void SenseApiManager::attachAllSenseDevicesFromSpecs(void)
{
for (const auto& spec : device::DeviceManager::senseDeviceSpecs) {
attachSenseDevice(*spec);
attachSenseDevice(spec);
}
}
void SenseApiManager::detachAllSenseDevices(void)
{
for (const auto& spec : device::DeviceManager::senseDeviceSpecs) {
detachSenseDevice(*spec);
detachSenseDevice(spec);
}
}