From d0e9f4467a89b9db58a95e6379a96bd5a38fc5e6 Mon Sep 17 00:00:00 2001 From: Kichan Kwon Date: Mon, 5 Dec 2016 13:57:00 +0900 Subject: [PATCH] heart : fix minor issues - Fix memory leak - Remove unreachable code - Fix cache searching condition Change-Id: Ia91f07461afa7a759899533276717ec2c175dfc0 Signed-off-by: Kichan Kwon --- src/heart/heart-cpu.c | 46 +++++++++++++++++++++++----------------------- src/heart/logging.c | 25 ++++++++++++++++--------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/heart/heart-cpu.c b/src/heart/heart-cpu.c index 6d6d870..788cbdb 100644 --- a/src/heart/heart-cpu.c +++ b/src/heart/heart-cpu.c @@ -315,6 +315,8 @@ static void heart_cpu_free_dat_cache(gpointer data) static void heart_free_value(gpointer value) { + int i; + struct heart_cpu_info *info; struct heart_cpu_table *table = (struct heart_cpu_table *)value; if (!table) @@ -323,8 +325,14 @@ static void heart_free_value(gpointer value) if (table->last_pid_info) g_slist_free_full(table->last_pid_info, free); - if (table->cpu_info) + if (table->cpu_info) { + for (i = 0; i < table->cpu_info->len; i++) { + info = g_array_index(table->cpu_info, + struct heart_cpu_info *, i); + free(info); + } g_array_free(table->cpu_info, TRUE); + } free(table); } @@ -709,7 +717,7 @@ void heart_cpu_update(struct logging_table_form *data, void *user_data) table->last_pid = pid; } } else { - table = malloc(sizeof(struct heart_cpu_table)); + table = calloc(1, sizeof(struct heart_cpu_table)); if (!table) { _E("malloc failed"); @@ -834,16 +842,22 @@ struct heart_cpu_data *heart_cpu_get_data(int uid, char *appid, enum heart_data_ struct heart_cpu_data *data; GHashTable *hashtable; + if (!appid) { + _E("Wrong arguments!"); + return NULL; + } + hashtable = heart_cpu_get_user_app_list(uid); if (!hashtable) { _E("Fail to get app list"); return NULL; } - if (!appid) { - _E("Wrong arguments!"); + if (!g_hash_table_size(hashtable)) { + _D("hash table is empty"); return NULL; } + switch (period) { case DATA_LATEST: index = 0; @@ -864,15 +878,6 @@ struct heart_cpu_data *heart_cpu_get_data(int uid, char *appid, enum heart_data_ _E("Wrong message arguments! %d", period); return NULL; } - if (!hashtable) { - _E("empty app list"); - return NULL; - } - - if (!g_hash_table_size(hashtable)) { - _E("hash table is empty"); - return NULL; - } ret = pthread_mutex_lock(&heart_cpu_mutex); if (ret) { @@ -972,6 +977,11 @@ int heart_cpu_get_table(int uid, GArray *arrays, enum heart_data_period period) return RESOURCED_ERROR_FAIL; } + if (!g_hash_table_size(hashtable)) { + _D("hash table is empty"); + return RESOURCED_ERROR_NO_DATA; + } + switch (period) { case DATA_LATEST: index = 0; @@ -993,16 +1003,6 @@ int heart_cpu_get_table(int uid, GArray *arrays, enum heart_data_period period) return RESOURCED_ERROR_FAIL; } - if (!hashtable) { - _E("empty app list"); - return RESOURCED_ERROR_FAIL; - } - - if (!g_hash_table_size(hashtable)) { - _E("hash table is empty"); - return RESOURCED_ERROR_FAIL; - } - ret = pthread_mutex_lock(&heart_cpu_mutex); if (ret) { _E("pthread_mutex_lock() failed, %d", ret); diff --git a/src/heart/logging.c b/src/heart/logging.c index de729c8..6b2d7b2 100644 --- a/src/heart/logging.c +++ b/src/heart/logging.c @@ -829,28 +829,28 @@ static void logging_cache_search(struct logging_table_form *data, struct logging if (strncmp(search->appid, data->appid, strlen(data->appid)+1)) return; - if (search->start && search->start < data->time) + if (search->start && search->start > data->time) return; - if (search->end && search->end > data->time) + if (search->end && search->end < data->time) return; } else if (search->pkgid) { if (strncmp(search->pkgid, data->pkgid, strlen(data->pkgid)+1)) return; - if (search->start && search->start < data->time) + if (search->start && search->start > data->time) return; - if (search->end && search->end > data->time) + if (search->end && search->end < data->time) return; } else if (search->start) { - if (search->start < data->time) + if (search->start > data->time) return; - if (search->end && search->end > data->time) + if (search->end && search->end < data->time) return; } else if (search->end) { - if (search->end > data->time) + if (search->end < data->time) return; } @@ -1288,6 +1288,7 @@ void logging_save_to_storage(int force) } table = g_queue_pop_head(module->cache); + free(table->data); free(table); } @@ -1626,6 +1627,10 @@ int logging_exit(void *data) ecore_timer_del(logging_update_timer); logging_update_timer = NULL; + /* delete data_timer */ + ecore_timer_del(logging_data_timer); + logging_data_timer = NULL; + unregister_notifier(RESOURCED_NOTIFIER_LOGGING_START, logging_start); unregister_notifier(RESOURCED_NOTIFIER_POWER_OFF, logging_poweroff); @@ -1650,8 +1655,10 @@ int logging_exit(void *data) g_array_free(logging_modules, true); /* Default DB close */ - g_hash_table_remove_all(system_default_db); - g_hash_table_remove_all(user_default_db); + if (system_default_db) + g_hash_table_remove_all(system_default_db); + if (user_default_db) + g_hash_table_remove_all(user_default_db); if (logging_leveldb) leveldb_close(logging_leveldb); _D("logging_exit"); -- 2.7.4