From: kibak.yoon Date: Wed, 18 May 2016 12:17:24 +0000 (+0900) Subject: sensord: change raw pointer to shared pointer for managing device(HAL) X-Git-Tag: accepted/tizen/common/20160526.145737~1^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d028b7e131090c0693a4b0093cc223dd5c448b8f;p=platform%2Fcore%2Fsystem%2Fsensord.git sensord: change raw pointer to shared pointer for managing device(HAL) handles - erase items in map and dlclose so handle in destructor explicitly Change-Id: I8c7e8359fe9741b31f857e127c3a8e2a192df1c7 Signed-off-by: kibak.yoon --- diff --git a/src/server/sensor_loader.cpp b/src/server/sensor_loader.cpp index d5961c8..f82856f 100644 --- a/src/server/sensor_loader.cpp +++ b/src/server/sensor_loader.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include @@ -58,8 +59,14 @@ sensor_loader::sensor_loader() sensor_loader::~sensor_loader() { - for (auto it = m_handles.begin(); it != m_handles.end(); ++it) - dlclose(*it); + sensor_device_map_t::iterator it_device; + std::vector::iterator it_handle; + + for (it_device = m_devices.begin(); it_device != m_devices.end();) + it_device = m_devices.erase(it_device); + + for (it_handle = m_handles.begin(); it_handle != m_handles.end(); ++it_handle) + dlclose(*it_handle); m_handles.clear(); } @@ -136,10 +143,11 @@ bool sensor_loader::load_sensor_devices(const string &path, void* &handle) for (int i = 0; i < device_size; ++i) { device = static_cast(_devices[i]); + std::shared_ptr device_ptr(device); - int info_size = device->get_sensors(&infos); + int info_size = device_ptr->get_sensors(&infos); for (int j = 0; j < info_size; ++j) - m_devices[&infos[j]] = device; + m_devices[&infos[j]] = device_ptr; } handle = _handle; @@ -187,9 +195,7 @@ void sensor_loader::create_physical_sensors(sensor_type_t type) for (it = m_devices.begin(); it != m_devices.end(); ++it) { info = it->first; - device = it->second; - if (m_devices[info] == NULL) - continue; + device = it->second.get(); if (type != UNKNOWN_SENSOR) { if (type != (sensor_type_t)(info->type)) @@ -214,8 +220,6 @@ void sensor_loader::create_physical_sensors(sensor_type_t type) m_sensors.insert(std::make_pair(_type, sensor_ptr)); _I("created [%s] sensor", sensor->get_name()); - - m_devices[info] = NULL; } } diff --git a/src/server/sensor_loader.h b/src/server/sensor_loader.h index ef659e3..486effe 100644 --- a/src/server/sensor_loader.h +++ b/src/server/sensor_loader.h @@ -36,7 +36,7 @@ class sensor_base; typedef std::multimap> sensor_map_t; -typedef std::map sensor_device_map_t; +typedef std::map> sensor_device_map_t; class sensor_loader { private: