[libgda] GdaDataModel: fix memory leak at import from model



commit dabdf35ccdb91baa29754382888a5406d4e22dce
Author: Daniel Espinosa <esodan gmail com>
Date:   Sat Apr 20 23:49:46 2019 -0500

    GdaDataModel: fix memory leak at import from model

 libgda/gda-data-model.c | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)
---
diff --git a/libgda/gda-data-model.c b/libgda/gda-data-model.c
index c454be53b..56d950e0d 100644
--- a/libgda/gda-data-model.c
+++ b/libgda/gda-data-model.c
@@ -1984,6 +1984,7 @@ gda_data_model_import_from_model (GdaDataModel *to, GdaDataModel *from,
                        g_set_error (error, GDA_DATA_MODEL_ERROR, GDA_DATA_MODEL_VALUE_TYPE_ERROR,
                                     _("Destination column %d can't be NULL but has no correspondence in the "
                                       "source data model"), i);
+      g_object_unref (from_iter);
                        return FALSE;
                }
                if (param) {
@@ -1997,6 +1998,7 @@ gda_data_model_import_from_model (GdaDataModel *to, GdaDataModel *from,
                                             gda_g_type_to_string (gda_column_get_g_type (column)),
                                             col,
                                             gda_g_type_to_string (gda_holder_get_g_type (param)));
+        g_object_unref (from_iter);
                                return FALSE;
                        }
                }
@@ -2134,17 +2136,12 @@ gda_data_model_import_from_model (GdaDataModel *to, GdaDataModel *from,
        }
        
        /* free memory */
-       {
-               GList *vlist;
-
-               vlist = append_values;
-               while (vlist) {
-                       if (vlist->data)
-                               gda_value_free ((GValue *) vlist->data);
-                       vlist = g_list_next (vlist);
-               }
-               g_free (append_types);
-       }
+  g_list_free_full (append_values, (GDestroyNotify) gda_value_free);
+       g_free (append_types);
+  g_object_unref (from_iter);
+  if (copy_params) {
+    g_slist_free (copy_params);
+  }
 
        if (retval && (to_row >= 0)) {
                /* remove extra rows */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]