[gom] gom: Fix fallout from object-types leak fix



commit a155133fa92111ff6eac526b7af59445a046b84c
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Jun 10 14:59:01 2014 +0200

    gom: Fix fallout from object-types leak fix
    
    The fix in 54737fd6c99fb20dc6c8877e035740b9a206258f was incomplete
    and 2 test cases were crashing during migration.
    
    Furthermore, the automatic migrator was freeing the list of object types
    after migrating to version 1, making it crash for any migration past
    that.

 gom/gom-repository.c       |   20 +++++++++++++++-----
 tests/test-gom-find.c      |    3 ---
 tests/test-gom-migration.c |    3 ---
 3 files changed, 15 insertions(+), 11 deletions(-)
---
diff --git a/gom/gom-repository.c b/gom/gom-repository.c
index c0c7793..5fdaeba 100644
--- a/gom/gom-repository.c
+++ b/gom/gom-repository.c
@@ -368,7 +368,6 @@ gom_repository_automatic_migrator (GomRepository  *repository,
     }
 
 bail_object:
-    g_list_free(object_types);
     g_list_free_full(cmds, g_object_unref);
     g_type_class_unref(klass);
     if (*error)
@@ -398,13 +397,19 @@ gom_repository_automatic_migrate_sync (GomRepository          *repository,
                                        GList                  *object_types,
                                        GError                **error)
 {
+   gboolean ret;
+
    g_return_val_if_fail(GOM_IS_REPOSITORY(repository), FALSE);
    g_return_val_if_fail(version >= 1, FALSE);
    g_return_val_if_fail(object_types != NULL, FALSE);
 
-   return gom_repository_migrate_sync(repository, version,
-                                      gom_repository_automatic_migrator, object_types,
-                                      error);
+   ret = gom_repository_migrate_sync(repository, version,
+                                     gom_repository_automatic_migrator, object_types,
+                                     error);
+
+   g_list_free(object_types);
+
+   return ret;
 }
 
 /**
@@ -433,6 +438,7 @@ gom_repository_automatic_migrate_async (GomRepository         *repository,
    g_return_if_fail(version >= 1);
    g_return_if_fail(object_types != NULL);
 
+   g_object_set_data_full (G_OBJECT (repository), "object-types", object_types, (GDestroyNotify) 
g_list_free);
    gom_repository_migrate_async (repository, version,
                                  gom_repository_automatic_migrator, object_types,
                                  callback, user_data);
@@ -443,7 +449,11 @@ gom_repository_automatic_migrate_finish (GomRepository  *repository,
                                          GAsyncResult   *result,
                                          GError        **error)
 {
-  return gom_repository_migrate_finish(repository, result, error);
+   g_return_val_if_fail(GOM_IS_REPOSITORY(repository), FALSE);
+   g_return_val_if_fail(G_IS_SIMPLE_ASYNC_RESULT(result), FALSE);
+
+   g_object_set_data(G_OBJECT(repository), "object-types", NULL);
+   return gom_repository_migrate_finish(repository, result, error);
 }
 
 static void
diff --git a/tests/test-gom-find.c b/tests/test-gom-find.c
index 6c06004..566ad99 100644
--- a/tests/test-gom-find.c
+++ b/tests/test-gom-find.c
@@ -272,8 +272,6 @@ migrate_cb (GObject      *object,
    char *url, *thumbnail_url;
    gboolean favourite;
 
-   g_object_set_data (object, "object-types", NULL);
-
    ret = gom_repository_migrate_finish(repository, result, &error);
    g_assert_no_error(error);
    g_assert(ret);
@@ -344,7 +342,6 @@ open_cb (GObject      *object,
    gom_repository_migrate_async(repository, 2, do_migrate, NULL, migrate_cb, user_data);
 #else
    object_types = g_list_prepend(NULL, GINT_TO_POINTER(BOOKMARKS_TYPE_RESOURCE));
-   g_object_set_data_full (G_OBJECT (repository), "object-types", object_types, (GDestroyNotify) 
g_list_free);
    gom_repository_automatic_migrate_async(repository, 2, object_types, migrate_cb, user_data);
 #endif
    g_object_unref(repository);
diff --git a/tests/test-gom-migration.c b/tests/test-gom-migration.c
index f3ce4a3..df73d62 100644
--- a/tests/test-gom-migration.c
+++ b/tests/test-gom-migration.c
@@ -247,8 +247,6 @@ migrate_cb (GObject      *object,
    gboolean ret;
    GError *error = NULL;
 
-   g_object_set_data (object, "object-types", NULL);
-
    ret = gom_repository_migrate_finish(repository, result, &error);
    g_assert_no_error(error);
    g_assert(ret);
@@ -279,7 +277,6 @@ open_cb (GObject      *object,
    gom_repository_migrate_async(repository, 2, do_migrate, NULL, migrate_cb, user_data);
 #else
    object_types = g_list_prepend(NULL, GINT_TO_POINTER(BOOKMARKS_TYPE_RESOURCE));
-   g_object_set_data_full (G_OBJECT (repository), "object-types", object_types, (GDestroyNotify) 
g_list_free);
    gom_repository_automatic_migrate_async(repository, 2, object_types, migrate_cb, user_data);
 #endif
    g_object_unref(repository);


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