diff --git a/src/libostree/ostree-fetcher-curl.c b/src/libostree/ostree-fetcher-curl.c index d6902893ff..8209985249 100644 --- a/src/libostree/ostree-fetcher-curl.c +++ b/src/libostree/ostree-fetcher-curl.c @@ -180,7 +180,6 @@ _ostree_fetcher_finalize (GObject *object) { OstreeFetcher *self = OSTREE_FETCHER (object); - curl_multi_cleanup (self->multi); g_free (self->remote_name); g_free (self->tls_ca_db_path); g_free (self->tls_client_cert_path); @@ -195,6 +194,11 @@ _ostree_fetcher_finalize (GObject *object) if (self->mainctx) g_main_context_unref (self->mainctx); g_clear_pointer (&self->custom_user_agent, g_free); + // Do this last as it may be possible that some of the teardown functions + // invoked by callbacks above reference this. For example, + // self->outstanding_requests has a GTask whose cleanup invokes request_unref() + // which calls curl_easy_cleanup(). + curl_multi_cleanup (self->multi); G_OBJECT_CLASS (_ostree_fetcher_parent_class)->finalize (object); }