Add and use OstreeAsyncProgressFinish helper

This is a g_autoptr version of OstreeAsyncProgress that also
calls ostree_async_progress_finish() before being freed.

This should be used in all "leaf" functions that creates an asyncprogress
to avoid leaking any idle change idle sources. Using a auto* means
some code can be cleaned up to avoid goto out style handling for this.

Also, this adds a missing finish() in
_flatpak_dir_fetch_remote_state_metadata_branch().
This commit is contained in:
Alexander Larsson
2019-12-16 14:48:47 +01:00
committed by Alexander Larsson
parent b3ab31e18a
commit c322cbdbb6
7 changed files with 30 additions and 48 deletions

View File

@@ -383,7 +383,7 @@ flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancella
{
OstreeRepoPullFlags pullflags = 0;
GVariantBuilder builder;
g_autoptr(OstreeAsyncProgress) progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) progress = NULL;
g_auto(GLnxConsoleRef) console = { 0, };
g_autoptr(GVariant) options = NULL;
gboolean res;
@@ -410,9 +410,6 @@ flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancella
progress,
cancellable, error);
if (progress)
ostree_async_progress_finish (progress);
if (!res)
return FALSE;
}

View File

@@ -261,7 +261,7 @@ ostree_create_usb (GOptionContext *context,
GCancellable *cancellable,
GError **error)
{
g_autoptr(OstreeAsyncProgress) progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) progress = NULL;
g_auto(GLnxConsoleRef) console = { 0, };
guint num_refs = 0;
@@ -348,9 +348,6 @@ ostree_create_usb (GOptionContext *context,
return FALSE;
}
if (progress != NULL)
ostree_async_progress_finish (progress);
glnx_console_unlock (&console);
}

View File

@@ -661,7 +661,7 @@ update_appstream (GPtrArray *dirs,
for (i = 0; remotes[i] != NULL; i++)
{
g_autoptr(GError) local_error = NULL;
g_autoptr(OstreeAsyncProgress) progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) progress = NULL;
guint64 ts_file_age;
ts_file_age = get_appstream_timestamp (dir, remotes[i], arch);
@@ -706,7 +706,6 @@ update_appstream (GPtrArray *dirs,
else
g_printerr ("%s: %s\n", _("Error updating"), local_error->message);
}
ostree_async_progress_finish (progress);
}
}
}
@@ -720,7 +719,7 @@ update_appstream (GPtrArray *dirs,
if (flatpak_dir_has_remote (dir, remote, NULL))
{
g_autoptr(OstreeAsyncProgress) progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) progress = NULL;
guint64 ts_file_age;
found = TRUE;
@@ -737,7 +736,6 @@ update_appstream (GPtrArray *dirs,
progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL);
res = flatpak_dir_update_appstream (dir, remote, arch, &changed,
progress, cancellable, error);
ostree_async_progress_finish (progress);
if (!res)
return FALSE;
}

View File

@@ -13495,7 +13495,7 @@ _flatpak_dir_fetch_remote_state_metadata_branch (FlatpakDir *self,
GCancellable *cancellable,
GError **error)
{
g_autoptr(OstreeAsyncProgress) progress = ostree_async_progress_new ();
g_autoptr(OstreeAsyncProgressFinish) progress = ostree_async_progress_new ();
FlatpakPullFlags flatpak_flags;
gboolean gpg_verify;
g_autofree char *checksum_from_summary = NULL;

View File

@@ -2096,8 +2096,7 @@ flatpak_installation_install_full (FlatpakInstallation *self,
g_autoptr(FlatpakDir) dir = NULL;
g_autofree char *ref = NULL;
g_autoptr(FlatpakDir) dir_clone = NULL;
g_autoptr(OstreeAsyncProgress) ostree_progress = NULL;
FlatpakInstalledRef *result = NULL;
g_autoptr(OstreeAsyncProgressFinish) ostree_progress = NULL;
g_autoptr(GFile) deploy_dir = NULL;
g_autoptr(FlatpakRemoteState) state = NULL;
g_autoptr(GMainContextPopDefault) main_context = NULL;
@@ -2142,7 +2141,7 @@ flatpak_installation_install_full (FlatpakInstallation *self,
FALSE, FALSE, state,
ref, NULL, (const char **) subpaths, NULL, NULL,
ostree_progress, cancellable, error))
goto out;
return NULL;
if (!(flags & FLATPAK_INSTALL_FLAGS_NO_TRIGGERS) &&
g_str_has_prefix (ref, "app"))
@@ -2155,18 +2154,10 @@ flatpak_installation_install_full (FlatpakInstallation *self,
{
flatpak_fail_error (error, FLATPAK_ERROR_ONLY_PULLED,
_("As requested, %s was only pulled, but not installed"), name);
goto out;
return NULL;
}
result = get_ref (dir, ref, cancellable, error);
if (result == NULL)
goto out;
out:
if (ostree_progress)
ostree_async_progress_finish (ostree_progress);
return result;
return get_ref (dir, ref, cancellable, error);
}
/**
@@ -2253,7 +2244,7 @@ flatpak_installation_update_full (FlatpakInstallation *self,
g_autofree char *ref = NULL;
g_autoptr(GFile) deploy_dir = NULL;
g_autoptr(FlatpakDir) dir_clone = NULL;
g_autoptr(OstreeAsyncProgress) ostree_progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) ostree_progress = NULL;
g_autofree char *remote_name = NULL;
FlatpakInstalledRef *result = NULL;
g_autofree char *target_commit = NULL;
@@ -2315,7 +2306,7 @@ flatpak_installation_update_full (FlatpakInstallation *self,
(const OstreeRepoFinderResult * const *) check_results,
(const char **) subpaths, NULL, NULL,
ostree_progress, cancellable, error))
goto out;
return NULL;
if (!(flags & FLATPAK_UPDATE_FLAGS_NO_TRIGGERS) &&
g_str_has_prefix (ref, "app"))
@@ -2323,15 +2314,12 @@ flatpak_installation_update_full (FlatpakInstallation *self,
result = get_ref (dir, ref, cancellable, error);
if (result == NULL)
goto out;
return NULL;
/* We don't get prunable objects if not pulling or if NO_PRUNE is passed */
if (!(flags & FLATPAK_UPDATE_FLAGS_NO_PULL) && !(flags & FLATPAK_UPDATE_FLAGS_NO_PRUNE))
flatpak_dir_prune (dir_clone, cancellable, NULL);
out:
if (ostree_progress)
ostree_async_progress_finish (ostree_progress);
return result;
}
@@ -2900,7 +2888,7 @@ flatpak_installation_update_appstream_full_sync (FlatpakInstallation *self,
{
g_autoptr(FlatpakDir) dir = NULL;
g_autoptr(FlatpakDir) dir_clone = NULL;
g_autoptr(OstreeAsyncProgress) ostree_progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) ostree_progress = NULL;
gboolean res;
g_autoptr(GMainContextPopDefault) main_context = NULL;
@@ -2929,9 +2917,6 @@ flatpak_installation_update_appstream_full_sync (FlatpakInstallation *self,
cancellable,
error);
if (ostree_progress)
ostree_async_progress_finish (ostree_progress);
return res;
}

View File

@@ -845,6 +845,20 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakAsyncProgressChained, flatpak_progress_unc
FlatpakAsyncProgressChained *flatpak_progress_chain (OstreeAsyncProgress *progress);
static inline void
flatpak_ostree_progress_finish (OstreeAsyncProgress *progress)
{
if (progress != NULL)
{
ostree_async_progress_finish (progress);
g_object_unref (progress);
}
}
typedef OstreeAsyncProgress OstreeAsyncProgressFinish;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeAsyncProgressFinish, flatpak_ostree_progress_finish);
void flatpak_log_dir_access (FlatpakDir *dir);
gboolean flatpak_check_required_version (const char *ref,

View File

@@ -386,7 +386,7 @@ handle_deploy (FlatpakSystemHelper *object,
g_autoptr(GFile) repo_file = g_file_new_for_path (arg_repo_path);
g_autoptr(GError) error = NULL;
g_autoptr(GFile) deploy_dir = NULL;
g_autoptr(OstreeAsyncProgress) ostree_progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) ostree_progress = NULL;
gboolean is_oci;
gboolean is_update;
gboolean no_deploy;
@@ -638,9 +638,6 @@ handle_deploy (FlatpakSystemHelper *object,
flatpak_invocation_return_error (invocation, error, "Error pulling from repo");
return TRUE;
}
if (ostree_progress)
ostree_async_progress_finish (ostree_progress);
}
else if (local_pull)
{
@@ -681,9 +678,6 @@ handle_deploy (FlatpakSystemHelper *object,
flatpak_invocation_return_error (invocation, error, "Error pulling from repo");
return TRUE;
}
if (ostree_progress)
ostree_async_progress_finish (ostree_progress);
}
if (!no_deploy)
@@ -848,7 +842,7 @@ handle_deploy_appstream (FlatpakSystemHelper *object,
g_autoptr(GError) first_error = NULL;
g_autoptr(GError) second_error = NULL;
g_autoptr(GMainContextPopDefault) main_context = NULL;
g_autoptr(OstreeAsyncProgress) ostree_progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) ostree_progress = NULL;
/* Work around ostree-pull spinning the default main context for the sync calls */
main_context = flatpak_main_context_new_default ();
@@ -880,7 +874,7 @@ handle_deploy_appstream (FlatpakSystemHelper *object,
else /* empty path == local pull */
{
g_autoptr(FlatpakRemoteState) state = NULL;
g_autoptr(OstreeAsyncProgress) ostree_progress = NULL;
g_autoptr(OstreeAsyncProgressFinish) ostree_progress = NULL;
g_autoptr(GError) first_error = NULL;
g_autoptr(GError) second_error = NULL;
g_autofree char *url = NULL;
@@ -929,9 +923,6 @@ handle_deploy_appstream (FlatpakSystemHelper *object,
return TRUE;
}
}
if (ostree_progress)
ostree_async_progress_finish (ostree_progress);
}
if (!flatpak_dir_deploy_appstream (system,