sensord: change raw pointer to shared pointer for managing device(HAL) 02/70202/3
authorkibak.yoon <kibak.yoon@samsung.com>
Wed, 18 May 2016 12:17:24 +0000 (21:17 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Thu, 19 May 2016 05:22:09 +0000 (22:22 -0700)
handles

- erase items in map and dlclose so handle in destructor explicitly

Change-Id: I8c7e8359fe9741b31f857e127c3a8e2a192df1c7
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/server/sensor_loader.cpp
src/server/sensor_loader.h

index d5961c8..f82856f 100644 (file)
@@ -28,6 +28,7 @@
 #include <virtual_sensor.h>
 #include <unordered_set>
 #include <algorithm>
+#include <memory>
 
 #include <hrm_sensor.h>
 
@@ -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<void *>::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<sensor_device *>(_devices[i]);
+               std::shared_ptr<sensor_device> 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;
        }
 }
 
index ef659e3..486effe 100644 (file)
@@ -36,7 +36,7 @@
 class sensor_base;
 
 typedef std::multimap<sensor_type_t, std::shared_ptr<sensor_base>> sensor_map_t;
-typedef std::map<const sensor_info_t *, sensor_device *> sensor_device_map_t;
+typedef std::map<const sensor_info_t *, std::shared_ptr<sensor_device>> sensor_device_map_t;
 
 class sensor_loader {
 private: