[gnome-software/630-flatpak-updates-are-stuck-in-installing-state-when-flatpak-update-was-already-done-outside: 102/103] gs-flatpak: Use preloaded list of installed references in gs_flatpak_ref_to_app()
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/630-flatpak-updates-are-stuck-in-installing-state-when-flatpak-update-was-already-done-outside: 102/103] gs-flatpak: Use preloaded list of installed references in gs_flatpak_ref_to_app()
- Date: Mon, 22 Mar 2021 10:45:57 +0000 (UTC)
commit 93249152d30558ccc9731c778b49553e3bcdfbb3
Author: Milan Crha <mcrha redhat com>
Date: Mon Mar 22 10:43:36 2021 +0100
gs-flatpak: Use preloaded list of installed references in gs_flatpak_ref_to_app()
This might make it quicker than asking for the list of installed references
every time the function is called.
plugins/flatpak/gs-flatpak.c | 30 +++++++++++++++++++-----------
1 file changed, 19 insertions(+), 11 deletions(-)
---
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
index 9b0484dff..3ab980426 100644
--- a/plugins/flatpak/gs-flatpak.c
+++ b/plugins/flatpak/gs-flatpak.c
@@ -1343,25 +1343,33 @@ gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref,
GCancellable *cancellable, GError **error)
{
g_autoptr(GPtrArray) xremotes = NULL;
- g_autoptr(GPtrArray) xrefs = NULL;
g_return_val_if_fail (ref != NULL, NULL);
- /* get all the installed apps (no network I/O) */
- xrefs = flatpak_installation_list_installed_refs (self->installation,
- cancellable,
- error);
- if (xrefs == NULL) {
- gs_flatpak_error_convert (error);
- return NULL;
+ g_mutex_lock (&self->installed_refs_mutex);
+
+ if (self->installed_refs == NULL) {
+ self->installed_refs = flatpak_installation_list_installed_refs (self->installation,
+ cancellable, error);
+
+ if (self->installed_refs == NULL) {
+ g_mutex_unlock (&self->installed_refs_mutex);
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
}
- for (guint i = 0; i < xrefs->len; i++) {
- FlatpakInstalledRef *xref = g_ptr_array_index (xrefs, i);
+
+ for (guint i = 0; i < self->installed_refs->len; i++) {
+ FlatpakInstalledRef *xref = g_ptr_array_index (self->installed_refs, i);
g_autofree gchar *ref_tmp = flatpak_ref_format_ref (FLATPAK_REF (xref));
- if (g_strcmp0 (ref, ref_tmp) == 0)
+ if (g_strcmp0 (ref, ref_tmp) == 0) {
+ g_mutex_unlock (&self->installed_refs_mutex);
return gs_flatpak_create_installed (self, xref, NULL, cancellable);
+ }
}
+ g_mutex_unlock (&self->installed_refs_mutex);
+
/* look at each remote xref */
xremotes = flatpak_installation_list_remotes (self->installation,
cancellable, error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]