Fix memory issues 93/130393/1 accepted/tizen/unified/20170522.185658 submit/tizen/20170522.085130 tizen_4.0.m1_release
authorKichan Kwon <k_c.kwon@samsung.com>
Mon, 22 May 2017 07:13:12 +0000 (16:13 +0900)
committerKichan Kwon <k_c.kwon@samsung.com>
Mon, 22 May 2017 07:23:11 +0000 (16:23 +0900)
Change-Id: I9313053711593b4a202b018f83827042aa676b65
Signed-off-by: Kichan Kwon <k_c.kwon@samsung.com>
packaging/resourced.spec
src/common/dbus-handler.c
src/heart/logging.c

index 38161e9..c8766b4 100644 (file)
@@ -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
index 9260567..bcdfc27 100644 (file)
@@ -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);
index adecd29..371e8b5 100644 (file)
@@ -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)