[libgda: 1/2] DB: Fixing memory leak and code optimization
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda: 1/2] DB: Fixing memory leak and code optimization
- Date: Sun, 8 Nov 2020 01:54:09 +0000 (UTC)
commit 1027dfbadf17c3e54fed47a0c274a403e0eae86b
Author: Pavlo Solntsev <p sun fun gmail com>
Date: Wed Oct 21 22:31:46 2020 -0500
DB: Fixing memory leak and code optimization
libgda/gda-db-base.c | 10 ++++++----
libgda/gda-db-catalog.c | 18 +++++++-----------
libgda/gda-db-column.c | 15 +++++----------
libgda/gda-db-table.c | 7 +++++--
libgda/gda-meta-store.c | 2 +-
libgda/test-cnc-open.c | 4 +++-
tests/db/check-db-catalog.c | 25 ++++++++++++++++---------
7 files changed, 43 insertions(+), 38 deletions(-)
---
diff --git a/libgda/gda-db-base.c b/libgda/gda-db-base.c
index 6c1344b20..3539163ef 100644
--- a/libgda/gda-db-base.c
+++ b/libgda/gda-db-base.c
@@ -141,8 +141,7 @@ gda_db_base_set_names (GdaDbBase *self,
else
g_string_printf (fullnamestr, "%s", priv->m_name);
- priv->m_fullname = g_strdup (fullnamestr->str);
- g_string_free (fullnamestr, TRUE);
+ priv->m_fullname = g_string_free (fullnamestr, FALSE);
}
/**
@@ -166,6 +165,7 @@ gda_db_base_get_full_name (GdaDbBase *self)
GdaDbBasePrivate *priv = gda_db_base_get_instance_private (self);
GString *fullnamestr = NULL;
+ g_free (priv->m_fullname);
fullnamestr = g_string_new (NULL);
@@ -177,10 +177,12 @@ gda_db_base_get_full_name (GdaDbBase *self)
else if (priv->m_name)
g_string_printf (fullnamestr, "%s", priv->m_name);
else
+ {
+ g_string_free (fullnamestr, TRUE);
return NULL;
+ }
- priv->m_fullname = g_strdup (fullnamestr->str);
- g_string_free (fullnamestr, TRUE);
+ priv->m_fullname = g_string_free (fullnamestr, FALSE);
return priv->m_fullname;
}
diff --git a/libgda/gda-db-catalog.c b/libgda/gda-db-catalog.c
index 04d590aa6..f7b212f0e 100644
--- a/libgda/gda-db-catalog.c
+++ b/libgda/gda-db-catalog.c
@@ -120,7 +120,7 @@ gda_db_catalog_dispose (GObject *object)
if (priv->cnc)
g_object_unref (priv->cnc);
- G_OBJECT_CLASS (gda_db_catalog_parent_class)->finalize (object);
+ G_OBJECT_CLASS (gda_db_catalog_parent_class)->dispose (object);
}
static void
@@ -220,10 +220,11 @@ _gda_db_catalog_get_dtd ()
if (g_file_test (file, G_FILE_TEST_EXISTS)) {
_gda_db_catalog_dtd = xmlParseDTD (NULL, (xmlChar*)file);
} else {
- if (g_getenv ("GDA_TOP_SRC_DIR"))
+ const gchar *gdatopsrcdir = g_getenv ("GDA_TOP_SRC_DIR");
+ if (gdatopsrcdir)
{
g_free (file);
- file = g_build_filename (g_getenv ("GDA_TOP_SRC_DIR"), "libgda",
+ file = g_build_filename (gdatopsrcdir, "libgda",
"libgda-db-catalog.dtd", NULL);
_gda_db_catalog_dtd = xmlParseDTD (NULL, (xmlChar*)file);
}
@@ -638,9 +639,6 @@ _gda_db_table_new_from_meta (GdaMetaDbObject *obj)
if (!obj)
return gda_db_table_new ();
- if (obj->obj_type != GDA_META_DB_TABLE)
- return NULL;
-
GdaMetaTable *metatable = GDA_META_TABLE(obj);
GdaDbTable *table = gda_db_table_new ();
@@ -655,9 +653,9 @@ _gda_db_table_new_from_meta (GdaMetaDbObject *obj)
GdaDbColumn *column = gda_db_column_new_from_meta (GDA_META_TABLE_COLUMN(it->data));
gda_db_table_append_column (table, column);
+ g_object_unref (column);
}
- it = NULL;
for (it = metatable->fk_list;it;it = it->next)
{
if (!GDA_META_TABLE_FOREIGN_KEY_IS_DECLARED(GDA_META_TABLE_FOREIGN_KEY(it->data)))
@@ -666,6 +664,7 @@ _gda_db_table_new_from_meta (GdaMetaDbObject *obj)
GdaDbFkey *fkey = gda_db_fkey_new_from_meta (GDA_META_TABLE_FOREIGN_KEY(it->data));
gda_db_table_append_fkey (table, fkey);
+ g_object_unref (fkey);
}
@@ -749,10 +748,7 @@ gda_db_catalog_parse_cnc (GdaDbCatalog *self,
if(GDA_META_DB_OBJECT(it->data)->obj_type == GDA_META_DB_TABLE)
{
GdaDbTable *table = _gda_db_table_new_from_meta (it->data);
- if (!table)
- continue;
-
- priv->mp_tables = g_list_append (priv->mp_tables,table);
+ priv->mp_tables = g_list_append (priv->mp_tables,table);
continue;
}
diff --git a/libgda/gda-db-column.c b/libgda/gda-db-column.c
index 551571464..29215715a 100644
--- a/libgda/gda-db-column.c
+++ b/libgda/gda-db-column.c
@@ -178,6 +178,7 @@ gda_db_column_finalize (GObject *object)
g_free (priv->mp_type);
g_free (priv->mp_default);
g_free (priv->mp_check);
+ g_free (priv->mp_comment);
G_OBJECT_CLASS (gda_db_column_parent_class)->finalize (object);
}
@@ -1127,13 +1128,10 @@ gda_db_column_prepare_create (GdaDbColumn *self,
g_free (numstr);
return FALSE;
}
- else
- {
- g_free (numstr);
- numstr = NULL;
- }
}
+ g_free (numstr);
+
/* We need to set scale only for numeric column type */
if (priv->m_gtype == G_TYPE_FLOAT ||
priv->m_gtype == G_TYPE_DOUBLE ||
@@ -1146,11 +1144,8 @@ gda_db_column_prepare_create (GdaDbColumn *self,
g_free (numstr);
return FALSE;
}
- else
- {
- g_free (numstr);
- numstr = NULL;
- }
+
+ g_free (numstr);
}
if(!gda_server_operation_set_value_at (op, GDA_BOOL_TO_STR (priv->m_nnul), error,
diff --git a/libgda/gda-db-table.c b/libgda/gda-db-table.c
index 4886bda6d..d0021ccb9 100644
--- a/libgda/gda-db-table.c
+++ b/libgda/gda-db-table.c
@@ -322,12 +322,15 @@ gda_db_table_parse_node (GdaDbBuildable *buildable,
name = xmlGetProp (node, (xmlChar *)gdadbtablenodes[GDA_DB_TABLE_NAME]);
g_assert (name); /* If here bug with xml validation */
gda_db_base_set_name(GDA_DB_BASE(self), (gchar*)name);
+ xmlFree(name);
xmlChar *tempt = xmlGetProp (node, (xmlChar*)gdadbtablenodes[GDA_DB_TABLE_TEMP]);
- if (tempt && (*tempt == 't' || *tempt == 't'))
+ if (tempt)
{
- g_object_set (G_OBJECT(self), "istemp", TRUE, NULL);
+ if (*tempt == 't' || *tempt == 't')
+ g_object_set (G_OBJECT(self), "istemp", TRUE, NULL);
+
xmlFree (tempt);
}
diff --git a/libgda/gda-meta-store.c b/libgda/gda-meta-store.c
index cc1d04ad1..d1466a018 100644
--- a/libgda/gda-meta-store.c
+++ b/libgda/gda-meta-store.c
@@ -1771,7 +1771,7 @@ create_view_object (GdaMetaStorePrivate *priv, GdaMetaStore *store, xmlNodePtr n
if (!view_name) {
g_set_error (error, GDA_META_STORE_ERROR, GDA_META_STORE_META_CONTEXT_ERROR,
"%s", _("Missing view name from <view> node"));
- goto onerror;
+ return NULL;
}
/* determine object's complete name */
diff --git a/libgda/test-cnc-open.c b/libgda/test-cnc-open.c
index 63257c167..954790269 100644
--- a/libgda/test-cnc-open.c
+++ b/libgda/test-cnc-open.c
@@ -98,7 +98,9 @@ test1a (void)
provs = gda_config_list_providers ();
g_assert (provs != NULL);
g_assert (gda_data_model_get_n_rows (provs) >= 1);
- g_print ("Providers:\n%s\n", gda_data_model_dump_as_string (provs));
+ gchar *printstr = gda_data_model_dump_as_string (provs);
+ g_print ("Providers:\n%s\n", printstr);
+ g_free (printstr);
sqlite = gda_config_get_provider ("SQLite", &error);
if (error != NULL) {
diff --git a/tests/db/check-db-catalog.c b/tests/db/check-db-catalog.c
index dba5b5715..46287959c 100644
--- a/tests/db/check-db-catalog.c
+++ b/tests/db/check-db-catalog.c
@@ -105,7 +105,9 @@ test_db_catalog_start (CheckDbObject *self,
g_assert_nonnull (self->catalog);
self->file = g_file_new_for_path (self->xmlfile);
- g_print ("GFile is %s\n",g_file_get_path(self->file));
+ gchar *strpath = g_file_get_path (self->file);
+ g_print ("GFile is %s\n", strpath);
+ g_free (strpath);
}
static void
@@ -146,6 +148,7 @@ test_db_catalog_start_db (DbCatalogCnc *self,
gda_db_column_set_pkey (self->column_id, TRUE);
gda_db_table_append_column (self->table,self->column_id);
+ g_object_unref (self->column_id);
self->column_name = gda_db_column_new ();
gda_db_column_set_name (self->column_name,"name");
@@ -153,30 +156,37 @@ test_db_catalog_start_db (DbCatalogCnc *self,
gda_db_column_set_size (self->column_name, 50);
gda_db_table_append_column (self->table,self->column_name);
+ g_object_unref (self->column_name);
self->column_ctime = gda_db_column_new ();
gda_db_column_set_name (self->column_ctime,"create_time");
gda_db_column_set_type (self->column_ctime, GDA_TYPE_TIME);
gda_db_table_append_column (self->table,self->column_ctime);
+ g_object_unref (self->column_ctime);
self->column_state = gda_db_column_new ();
gda_db_column_set_name (self->column_state,"state");
gda_db_column_set_type (self->column_state, G_TYPE_BOOLEAN);
gda_db_table_append_column (self->table,self->column_state);
+ g_object_unref (self->column_state);
self->column_ts = gda_db_column_new ();
gda_db_column_set_name (self->column_ts,"mytimestamp");
gda_db_column_set_type (self->column_ts, G_TYPE_DATE_TIME);
gda_db_table_append_column (self->table,self->column_ts);
+ g_object_unref (self->column_ts);
gda_db_catalog_append_table (self->catalog, self->table);
+ g_object_unref (self->table);
open_res = gda_db_catalog_perform_operation (self->catalog,NULL);
g_assert_true (open_res);
+
+ g_object_unref (self->catalog);
}
static void
@@ -194,14 +204,7 @@ static void
test_db_catalog_finish_db (DbCatalogCnc *self,
G_GNUC_UNUSED gconstpointer user_data)
{
- gda_connection_close(self->cnc,NULL);
g_object_unref (self->cnc);
- g_object_unref (self->catalog);
- g_object_unref (self->column_id);
- g_object_unref (self->column_name);
- g_object_unref (self->column_ctime);
- g_object_unref (self->column_ts);
- g_object_unref (self->table);
}
static void
@@ -455,6 +458,7 @@ test_db_catalog_constraint_start (DbCheckCatallog *self,
gda_db_column_set_pkey (self->column_a, TRUE);
gda_db_table_append_column (self->table,self->column_a);
+ g_object_unref (self->column_a);
self->column_b = gda_db_column_new ();
gda_db_column_set_name (self->column_b, "columnb");
@@ -463,14 +467,18 @@ test_db_catalog_constraint_start (DbCheckCatallog *self,
gda_db_column_set_pkey (self->column_b, FALSE);
gda_db_table_append_column (self->table, self->column_b);
+ g_object_unref (self->column_b);
gda_db_table_append_constraint (self->table, "CHECK (columna = columnb)");
gda_db_catalog_append_table (self->catalog, self->table);
+ g_object_unref (self->table);
open_res = gda_db_catalog_perform_operation (self->catalog,NULL);
g_assert_true (open_res);
+
+ g_object_unref (self->catalog);
}
static void
@@ -527,7 +535,6 @@ static void
test_db_catalog_constraint_finish (DbCheckCatallog *self,
G_GNUC_UNUSED gconstpointer user_data)
{
- g_object_unref (self->catalog);
gda_connection_close (self->cnc, NULL);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]