From: Jonathan Lebon Date: Wed, 23 Oct 2019 15:04:00 +0000 (-0400) Subject: lib/pull: Avoid calling destroy on unref'ed GSource X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~4^2~14^2~6^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d4a186e80e139b366c527d6398173bd1a80c7c0b;p=ostree.git lib/pull: Avoid calling destroy on unref'ed GSource We're creating the timer source and then passing ownership to the context, but because we didn't free the pointer, we would still call `g_source_destroy` in the exit path. We'd do this right after doing `unref` on the context too, which would have already destroyed and unref'ed the source. Drop that and just restrict the scope of that variable down to make things more obvious. Just noticed this after reviewing #1953. --- diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c index bcb8b420..dd4dbff1 100644 --- a/src/libostree/ostree-repo-pull.c +++ b/src/libostree/ostree-repo-pull.c @@ -3573,7 +3573,6 @@ ostree_repo_pull_with_options (OstreeRepo *self, g_autofree char **refs_to_fetch = NULL; g_autoptr(GVariantIter) collection_refs_iter = NULL; g_autofree char **override_commit_ids = NULL; - GSource *update_timeout = NULL; gboolean opt_gpg_verify_set = FALSE; gboolean opt_gpg_verify_summary_set = FALSE; gboolean opt_collection_refs_set = FALSE; @@ -4505,6 +4504,8 @@ ostree_repo_pull_with_options (OstreeRepo *self, if (pull_data->progress) { + g_autoptr(GSource) update_timeout = NULL; + /* Setup a custom frequency if set */ if (update_frequency > 0) update_timeout = g_timeout_source_new (pull_data->dry_run ? 0 : update_frequency); @@ -4514,7 +4515,6 @@ ostree_repo_pull_with_options (OstreeRepo *self, g_source_set_priority (update_timeout, G_PRIORITY_HIGH); g_source_set_callback (update_timeout, update_progress, pull_data, NULL); g_source_attach (update_timeout, pull_data->main_context); - g_source_unref (update_timeout); } /* Now await work completion */ @@ -4732,8 +4732,6 @@ ostree_repo_pull_with_options (OstreeRepo *self, if (!inherit_transaction) ostree_repo_abort_transaction (pull_data->repo, cancellable, NULL); g_main_context_unref (pull_data->main_context); - if (update_timeout) - g_source_destroy (update_timeout); g_strfreev (configured_branches); g_clear_object (&pull_data->fetcher); g_clear_pointer (&pull_data->extra_headers, (GDestroyNotify)g_variant_unref);