From 46736a63fa5da908af6cbde011e994b66c9a670b Mon Sep 17 00:00:00 2001 From: Evangelos Ribeiro Tzaras Date: Mon, 16 Jan 2023 09:09:40 +0100 Subject: [PATCH] record-store: Ensure store stays alive during async tasks As GOM does not allow us to cancel asynchronous tasks, we need to hold references temporarily. --- src/calls-record-store.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/calls-record-store.c b/src/calls-record-store.c index 1f26901..f5ff0f5 100644 --- a/src/calls-record-store.c +++ b/src/calls-record-store.c @@ -159,6 +159,7 @@ load_calls_fetch_cb (GomResourceGroup *group, if (error) { g_debug ("Error fetching call records: %s", error->message); + goto exit; return; } g_assert (ok); @@ -193,6 +194,8 @@ load_calls_fetch_cb (GomResourceGroup *group, g_free (records); g_object_unref (group); +exit: + g_object_unref (self); } @@ -211,7 +214,7 @@ load_calls_find_cb (GomRepository *repository, if (error) { g_debug ("Error finding call records in database `%s': %s", self->filename, error->message); - return; + goto exit; } g_assert (group != NULL); @@ -219,7 +222,7 @@ load_calls_find_cb (GomRepository *repository, if (count == 0) { g_debug ("No call records found in database `%s'", self->filename); - return; + goto exit; } g_debug ("Found %u call records in database `%s', fetching", @@ -228,7 +231,9 @@ load_calls_find_cb (GomRepository *repository, 0, count, (GAsyncReadyCallback) load_calls_fetch_cb, - self); + g_object_ref (self)); +exit: + g_object_unref (self); } @@ -253,7 +258,7 @@ load_calls (CallsRecordStore *self) filter, sorting, (GAsyncReadyCallback) load_calls_find_cb, - self); + g_object_ref (self)); g_object_unref (G_OBJECT (filter)); } @@ -283,6 +288,8 @@ set_up_repo_migrate_cb (GomRepository *repo, self->filename); load_calls (self); } + + g_object_unref (self); } @@ -310,7 +317,7 @@ set_up_repo (CallsRecordStore *self) RECORD_STORE_VERSION, types, (GAsyncReadyCallback) set_up_repo_migrate_cb, - self); + g_object_ref (self)); self->repository = repo; } @@ -363,6 +370,8 @@ open_repo_adapter_open_cb (GomAdapter *adapter, self->filename); set_up_repo (self); } + + g_object_unref (self); } @@ -392,7 +401,7 @@ open_repo (CallsRecordStore *self) (self->adapter, uri, (GAsyncReadyCallback) open_repo_adapter_open_cb, - self); + g_object_ref (self)); g_free (uri); }