Fix Memory leaks 20/115420/1 accepted/tizen/common/20170302.151739 accepted/tizen/ivi/20170302.121544 accepted/tizen/mobile/20170302.121145 accepted/tizen/tv/20170302.121450 accepted/tizen/unified/20170309.032116 accepted/tizen/wearable/20170302.121532 submit/tizen/20170302.084638 submit/tizen_unified/20170308.100405
authorjusung son <jusung07.son@samsung.com>
Mon, 20 Feb 2017 01:40:43 +0000 (10:40 +0900)
committerjusung son <jusung07.son@samsung.com>
Mon, 20 Feb 2017 01:40:43 +0000 (10:40 +0900)
Change-Id: I11086774f3061911622529dd71564f745e09ff8b
Signed-off-by: jusung son <jusung07.son@samsung.com>
src/data-control-map.c
src/data-control-noti.c
src/data-control-sql.c

index 7431686..b5239cf 100755 (executable)
@@ -767,7 +767,8 @@ int datacontrol_map_unregister_response_cb(datacontrol_h provider)
 {
        int ret = DATACONTROL_ERROR_NONE;
        map_response_cb_s *map_dc_temp = (map_response_cb_s *)calloc(1, sizeof(map_response_cb_s));
-       void *map_dc_returned = NULL;
+       map_response_cb_s *map_dc_returned = NULL;
+       char *tmp_provider_id;
 
        g_hash_table_remove(__socket_pair_hash, provider->provider_id);
 
@@ -784,13 +785,32 @@ int datacontrol_map_unregister_response_cb(datacontrol_h provider)
                goto EXCEPTION;
        }
 
-       map_dc_returned = tdelete(map_dc_temp, &datacontrol_map_tree_root, __map_instance_compare);
+       if (datacontrol_map_tree_root == NULL) {
+               LOGE("The listener tree is empty");
+               ret = DATACONTROL_ERROR_INVALID_PARAMETER;
+               goto EXCEPTION;
+       }
+
+       map_dc_returned = *(map_response_cb_s **)tfind(map_dc_temp, &datacontrol_map_tree_root, __map_instance_compare);
        if (map_dc_returned == NULL) {
                LOGE("invalid parameter");
                ret = DATACONTROL_ERROR_INVALID_PARAMETER;
                goto EXCEPTION;
        }
 
+       if (map_dc_returned->app_id)
+               free(map_dc_returned->app_id);
+       if (map_dc_returned->data_id)
+               free(map_dc_returned->data_id);
+       if (map_dc_returned->access_info)
+               free(map_dc_returned->access_info);
+       if (map_dc_returned->request_info_list)
+               g_list_free_full(map_dc_returned->request_info_list, free);
+
+       tmp_provider_id = map_dc_returned->provider_id;
+       tdelete(map_dc_temp, &datacontrol_map_tree_root, __map_instance_compare);
+       free(tmp_provider_id);
+
        /* LCOV_EXCL_START */
 EXCEPTION:
         if (map_dc_temp) {
index 7068b07..53541d9 100755 (executable)
@@ -414,7 +414,6 @@ int datacontrol_add_data_change_cb(datacontrol_h provider,
        __add_callback_result_cb_list = g_list_append(__add_callback_result_cb_list, result_cb_info);
        LOGI("datacontrol_add_data_change_cb done");
 
-       return ret;
        /* LCOV_EXCL_START */
 err:
        if (access)
@@ -423,8 +422,10 @@ err:
                free(provider_app_id);
        if (path)
                free(path);
-       if (monitor_id > 0)
-               g_dbus_connection_signal_unsubscribe(_get_dbus_connection(), monitor_id);
+       if (ret != DATACONTROL_ERROR_NONE) {
+               if (monitor_id > 0)
+                       g_dbus_connection_signal_unsubscribe(_get_dbus_connection(), monitor_id);
+       }
 
        return ret;
        /* LCOV_EXCL_STOP */
index 68e40dd..cce6e53 100755 (executable)
@@ -1143,7 +1143,8 @@ EXCEPTION:
 int datacontrol_sql_unregister_response_cb(datacontrol_h provider)
 {
        int ret = DATACONTROL_ERROR_NONE;
-       void *sql_dc_returned = NULL;
+       sql_response_cb_s *sql_dc_returned = NULL;
+       char *tmp_provider_id;
 
        LOGE("g_hash_table_remove");
 
@@ -1164,13 +1165,32 @@ int datacontrol_sql_unregister_response_cb(datacontrol_h provider)
                goto EXCEPTION;
        }
 
-       sql_dc_returned = tdelete(sql_dc_temp, &datacontrol_sql_tree_root, __sql_instance_compare);
+       if (datacontrol_sql_tree_root == NULL) {
+               LOGE("The listener tree is empty");
+               ret = DATACONTROL_ERROR_INVALID_PARAMETER;
+               goto EXCEPTION;
+       }
+
+       sql_dc_returned = *(sql_response_cb_s **)tfind(sql_dc_temp, &datacontrol_sql_tree_root, __sql_instance_compare);
        if (sql_dc_returned == NULL) {
                LOGE("invalid parameter");
                ret = DATACONTROL_ERROR_INVALID_PARAMETER;
                goto EXCEPTION;
        }
 
+       if (sql_dc_returned->app_id)
+               free(sql_dc_returned->app_id);
+       if (sql_dc_returned->data_id)
+               free(sql_dc_returned->data_id);
+       if (sql_dc_returned->access_info)
+               free(sql_dc_returned->access_info);
+       if (sql_dc_returned->request_info_list)
+               g_list_free_full(sql_dc_returned->request_info_list, free);
+
+       tmp_provider_id = sql_dc_returned->provider_id;
+       tdelete(sql_dc_temp, &datacontrol_sql_tree_root, __sql_instance_compare);
+       free(tmp_provider_id);
+
 EXCEPTION:
        if (sql_dc_temp) {
                if (sql_dc_temp->provider_id)