From 352970ca3fbd7ab4f40b9c9018add2fb886614f2 Mon Sep 17 00:00:00 2001 From: Kichan Kwon Date: Mon, 22 May 2017 16:13:12 +0900 Subject: [PATCH] Fix memory issues Change-Id: I9313053711593b4a202b018f83827042aa676b65 Signed-off-by: Kichan Kwon --- packaging/resourced.spec | 2 +- src/common/dbus-handler.c | 3 +++ src/heart/logging.c | 44 ++++++++++++++++++++++++++++---------------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/packaging/resourced.spec b/packaging/resourced.spec index 38161e9..c8766b4 100644 --- a/packaging/resourced.spec +++ b/packaging/resourced.spec @@ -1,7 +1,7 @@ Name: resourced Summary: Resource management daemon Version: 0.4 -Release: 5 +Release: 6 Group: System/Libraries License: Apache-2.0 Source0: %{name}-%{version}.tar.gz diff --git a/src/common/dbus-handler.c b/src/common/dbus-handler.c index 9260567..bcdfc27 100644 --- a/src/common/dbus-handler.c +++ b/src/common/dbus-handler.c @@ -258,6 +258,7 @@ resourced_ret_c d_bus_register_signal(const char *path, const char *interface, d_bus_signal_handler, signal, NULL); if (!(signal->subscription_id)) { _E("Failed to subscribe signal %s", name); + free(signal); return RESOURCED_ERROR_FAIL; } @@ -312,6 +313,7 @@ resourced_ret_c d_bus_register_methods(const char *path, const char *xml, handle->node_info = g_dbus_node_info_new_for_xml(xml, &err); if (!handle->node_info) { _E("Failed to make node_info : %s", err->message); + free(handle); return RESOURCED_ERROR_FAIL; } @@ -319,6 +321,7 @@ resourced_ret_c d_bus_register_methods(const char *path, const char *xml, path, handle->node_info->interfaces[0], &vtable, (gpointer)handle, NULL, &err); if (!handle->subscription_id) { _E("Failed to register gdbus methods with path %s : %s", path, err->message); + free(handle); return RESOURCED_ERROR_FAIL; } else dbus_method_handle_list = g_list_append(dbus_method_handle_list, (gpointer)handle); diff --git a/src/heart/logging.c b/src/heart/logging.c index adecd29..371e8b5 100644 --- a/src/heart/logging.c +++ b/src/heart/logging.c @@ -402,14 +402,15 @@ int logging_module_init(char *name, enum logging_period max_period, NULL, logging_free_db_value); if (!(module->db_list)) { _E("Fail to create HEART-%s DB table", name); - return RESOURCED_ERROR_FAIL; + ret = RESOURCED_ERROR_FAIL; + goto error; } snprintf(db_path, LOGGING_BUF_MAX, SYSTEM_OWN_DB_NAME, name); if (logging_create_default_db(db_path, &db_file) != RESOURCED_ERROR_NONE) { _E("Fail to create %s", db_path); - g_hash_table_unref(module->db_list); - return RESOURCED_ERROR_DB_FAILED; + ret = RESOURCED_ERROR_DB_FAILED; + goto error; } db_elem = (struct logging_db*)malloc(sizeof(struct logging_db)); db_elem->path = strndup(db_path, sizeof(db_path)); @@ -425,13 +426,14 @@ int logging_module_init(char *name, enum logging_period max_period, case USER_OWN: if (logging_update_user_db_list(name, USER_OWN, &(module->db_list))) { _E("Fail to create HEART-%s DB", name); - return RESOURCED_ERROR_FAIL; + ret = RESOURCED_ERROR_FAIL; + goto error; } break; default: _E("Unknown DB type"); - return RESOURCED_ERROR_INVALID_PARAMETER; - break; + ret = RESOURCED_ERROR_INVALID_PARAMETER; + goto error; } snprintf(buf, LOGGING_BUF_MAX, CREATE_QUERY, name); @@ -443,13 +445,15 @@ int logging_module_init(char *name, enum logging_period max_period, if (ret != SQLITE_OK) { _E("create %s table failed %s", name, sqlite3_errmsg(db_file)); sqlite3_finalize(stmt); - return RESOURCED_ERROR_DB_FAILED; + ret = RESOURCED_ERROR_DB_FAILED; + goto error; } if (sqlite3_step(stmt) != SQLITE_DONE) { _E("create %s table failed %s", name, sqlite3_errmsg(db_file)); sqlite3_finalize(stmt); - return RESOURCED_ERROR_DB_FAILED; + ret = RESOURCED_ERROR_DB_FAILED; + goto error; } sqlite3_finalize(stmt); @@ -467,26 +471,24 @@ int logging_module_init(char *name, enum logging_period max_period, if (asprintf(&(module->name), "%s", name) < 0) { _E("asprintf failed"); - free(module); - return RESOURCED_ERROR_OUT_OF_MEMORY; + ret = RESOURCED_ERROR_OUT_OF_MEMORY; + goto error; } module->max_period = max_period; if (pthread_mutex_init(&module->cache_mutex, NULL) < 0) { _E("%s module mutex_init failed %d", name, errno); - free(module->name); - free(module); - return RESOURCED_ERROR_FAIL; + ret = RESOURCED_ERROR_FAIL; + goto error; } module->cache = g_queue_new(); if (!module->cache) { _E("g_queue_new failed"); - free(module->name); - free(module); - return RESOURCED_ERROR_OUT_OF_MEMORY; + ret = RESOURCED_ERROR_OUT_OF_MEMORY; + goto error; } g_queue_init(module->cache); @@ -494,6 +496,16 @@ int logging_module_init(char *name, enum logging_period max_period, g_array_append_val(logging_modules, module); return RESOURCED_ERROR_NONE; + +error: + if (module->name) + free(module->name); + if (module->db_list && (db_type == SYSTEM_OWN || db_type == USER_OWN)) + g_hash_table_unref(module->db_list); + if (module) + free(module); + + return ret; } int logging_module_exit(void) -- 2.7.4