From 7032a54a09efae7cdfdf9a64c10aaef8d8d9e1b1 Mon Sep 17 00:00:00 2001 From: Stefan Schmidt Date: Tue, 2 Oct 2012 08:47:54 +0000 Subject: [PATCH] eeze/sensor: Fix big memleak that happened on every eeze use. Really free the list with sensor modules when shutting down. No idea how I dropped that as I found it in one old local version I had. Thanks to Mike for the notice and valgrind for the tooling. Also make sure we don't corrupt the list before we can free it. SVN revision: 77291 --- legacy/eeze/src/lib/eeze_sensor.c | 9 +++++++-- legacy/eeze/src/modules/eeze_sensor_fake.c | 5 +++++ legacy/eeze/src/modules/eeze_sensor_tizen.c | 5 +++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/legacy/eeze/src/lib/eeze_sensor.c b/legacy/eeze/src/lib/eeze_sensor.c index 7e1f6b28b4..2b9055565a 100644 --- a/legacy/eeze/src/lib/eeze_sensor.c +++ b/legacy/eeze/src/lib/eeze_sensor.c @@ -41,7 +41,7 @@ EAPI Eeze_Sensor_Obj * eeze_sensor_obj_get(Eeze_Sensor_Type sensor_type) { Eina_List *l; - Eeze_Sensor_Obj *obj; + Eeze_Sensor_Obj *obj, *sens; Eeze_Sensor_Module *module; module = _highest_priority_module_get(); @@ -52,7 +52,12 @@ eeze_sensor_obj_get(Eeze_Sensor_Type sensor_type) { if (obj->type == sensor_type) { - return obj; + sens = calloc(1, sizeof(Eeze_Sensor_Obj)); + if (!sens) return NULL; + + memcpy(sens, obj, sizeof(Eeze_Sensor_Obj)); + + return sens; } } return NULL; diff --git a/legacy/eeze/src/modules/eeze_sensor_fake.c b/legacy/eeze/src/modules/eeze_sensor_fake.c index 30ab5cc3cc..a5be287b1f 100644 --- a/legacy/eeze/src/modules/eeze_sensor_fake.c +++ b/legacy/eeze/src/modules/eeze_sensor_fake.c @@ -168,7 +168,12 @@ sensor_fake_init(void) void sensor_fake_shutdown(void) { + Eeze_Sensor_Obj *sens; + eeze_sensor_module_unregister("fake"); + EINA_LIST_FREE(esensor_module->sensor_list, sens) + free(sens); + free(esensor_module); esensor_module = NULL; } diff --git a/legacy/eeze/src/modules/eeze_sensor_tizen.c b/legacy/eeze/src/modules/eeze_sensor_tizen.c index ae74f6f865..ffcc263e66 100644 --- a/legacy/eeze/src/modules/eeze_sensor_tizen.c +++ b/legacy/eeze/src/modules/eeze_sensor_tizen.c @@ -781,9 +781,14 @@ sensor_tizen_init(void) void sensor_tizen_shutdown(void) { + Eeze_Sensor_Obj *sens; + sensor_stop(sensor_handle, SENSOR_MOTION_FACEDOWN); sensor_stop(sensor_handle, SENSOR_MOTION_DOUBLETAP); eeze_sensor_module_unregister("tizen"); + EINA_LIST_FREE(esensor_module->sensor_list, sens) + free(sens); + free(esensor_module); esensor_module = NULL; }