sensord: fix the memory leak when get_data is failed 29/64529/1
authorkibak.yoon <kibak.yoon@samsung.com>
Mon, 28 Mar 2016 15:39:13 +0000 (00:39 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Fri, 1 Apr 2016 13:44:42 +0000 (22:44 +0900)
 - problem: if sensor->get_data() is failed, event memory is not freed.
            so there is memory-leak problem.
 - solution: the allocation code of the event meory is moved when it is needed.

Change-Id: If42ab454c269ceab2ed64a13a9915cab23a2822e
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/server/sensor_event_poller.cpp

index b6d46ca..1327b44 100644 (file)
@@ -135,7 +135,6 @@ bool sensor_event_poller::process_event(int fd, const std::vector<uint32_t> &ids
                        continue;
 
                while (remains > 0) {
-                       event = (sensor_event_t *)malloc(sizeof(sensor_event_t));
                        remains = sensor->get_data(&data, &data_length);
                        if (remains < 0) {
                                _E("Failed to get sensor data");
@@ -143,11 +142,16 @@ bool sensor_event_poller::process_event(int fd, const std::vector<uint32_t> &ids
                        }
 
                        if (!sensor->on_event(data, data_length, remains)) {
-                               free(event);
                                free(data);
                                continue;
                        }
 
+                       event = (sensor_event_t *)malloc(sizeof(sensor_event_t));
+                       if (!event) {
+                               _E("Memory allocation failed");
+                               break;
+                       }
+
                        event->sensor_id = sensor->get_id();
                        event->event_type = sensor->get_event_type();
                        event->data_length = data_length;