forked from Mirrors/flatpak-builder
XdgAppDir helper: Update system_helper threadsafely
parent
990127fe11
commit
64a28a9e7c
|
@ -37,6 +37,8 @@
|
|||
|
||||
#include "errno.h"
|
||||
|
||||
#define NO_SYSTEM_HELPER ((XdgAppSystemHelper *)(gpointer)1)
|
||||
|
||||
struct XdgAppDir {
|
||||
GObject parent;
|
||||
|
||||
|
@ -47,7 +49,6 @@ struct XdgAppDir {
|
|||
OstreeRepo *child_repo;
|
||||
GLnxLockFile child_repo_lock;
|
||||
|
||||
gboolean initialized_system_helper;
|
||||
XdgAppSystemHelper *system_helper;
|
||||
|
||||
SoupSession *soup_session;
|
||||
|
@ -198,35 +199,46 @@ xdg_app_ensure_user_cache_dir_location (GError **error)
|
|||
return g_steal_pointer (&cache_dir);
|
||||
}
|
||||
|
||||
static void
|
||||
xdg_app_dir_init_system_helper (XdgAppDir *self)
|
||||
static XdgAppSystemHelper *
|
||||
xdg_app_dir_get_system_helper (XdgAppDir *self)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (self->initialized_system_helper)
|
||||
return;
|
||||
if (g_once_init_enter (&self->system_helper))
|
||||
{
|
||||
XdgAppSystemHelper *system_helper;
|
||||
system_helper =
|
||||
xdg_app_system_helper_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
|
||||
"org.freedesktop.XdgApp.SystemHelper",
|
||||
"/org/freedesktop/XdgApp/SystemHelper",
|
||||
NULL, &error);
|
||||
if (error != NULL)
|
||||
{
|
||||
g_warning ("Can't find org.freedesktop.XdgApp.SystemHelper: %s\n", error->message);
|
||||
system_helper = NO_SYSTEM_HELPER;
|
||||
}
|
||||
|
||||
self->system_helper =
|
||||
xdg_app_system_helper_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
|
||||
"org.freedesktop.XdgApp.SystemHelper",
|
||||
"/org/freedesktop/XdgApp/SystemHelper",
|
||||
NULL, &error);
|
||||
if (error != NULL)
|
||||
g_warning ("Can't find org.freedesktop.XdgApp.SystemHelper: %s\n", error->message);
|
||||
self->initialized_system_helper = TRUE;
|
||||
g_once_init_leave (&self->system_helper, system_helper);
|
||||
}
|
||||
|
||||
if (self->system_helper != NO_SYSTEM_HELPER)
|
||||
return self->system_helper;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
xdg_app_dir_use_child_repo (XdgAppDir *self)
|
||||
{
|
||||
XdgAppSystemHelper *system_helper;
|
||||
|
||||
if (self->user || getuid () == 0)
|
||||
return FALSE;
|
||||
|
||||
xdg_app_dir_init_system_helper (self);
|
||||
system_helper = xdg_app_dir_get_system_helper (self);
|
||||
|
||||
return self->system_helper != NULL;
|
||||
return system_helper != NULL;
|
||||
}
|
||||
|
||||
static OstreeRepo *
|
||||
|
@ -2568,10 +2580,11 @@ xdg_app_dir_deploy_install (XdgAppDir *self,
|
|||
if (self->child_repo)
|
||||
{
|
||||
char *empty_subpaths[] = {NULL};
|
||||
XdgAppSystemHelper *system_helper = xdg_app_dir_get_system_helper (self);
|
||||
|
||||
g_assert (self->system_helper != NULL);
|
||||
g_assert (system_helper != NULL);
|
||||
|
||||
if (!xdg_app_system_helper_call_deploy_sync (self->system_helper,
|
||||
if (!xdg_app_system_helper_call_deploy_sync (system_helper,
|
||||
gs_file_get_path_cached (ostree_repo_get_path (self->child_repo)),
|
||||
XDG_APP_HELPER_DEPLOY_FLAGS_NONE,
|
||||
ref,
|
||||
|
@ -2678,9 +2691,11 @@ xdg_app_dir_deploy_update (XdgAppDir *self,
|
|||
active_checksum = xdg_app_dir_read_active (self, ref, NULL);
|
||||
if (active_checksum == NULL || strcmp (active_checksum, pulled_checksum) != 0)
|
||||
{
|
||||
g_assert (self->system_helper != NULL);
|
||||
XdgAppSystemHelper *system_helper = xdg_app_dir_get_system_helper (self);
|
||||
|
||||
if (!xdg_app_system_helper_call_deploy_sync (self->system_helper,
|
||||
g_assert (system_helper != NULL);
|
||||
|
||||
if (!xdg_app_system_helper_call_deploy_sync (system_helper,
|
||||
gs_file_get_path_cached (ostree_repo_get_path (self->child_repo)),
|
||||
XDG_APP_HELPER_DEPLOY_FLAGS_UPDATE,
|
||||
ref,
|
||||
|
|
Loading…
Reference in New Issue