summaryrefslogtreecommitdiff
path: root/src/nautilus-dbus-launcher.c
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2022-07-31 15:35:47 -0700
committerAntónio Fernandes <antoniof@gnome.org>2022-08-04 22:30:38 +0000
commit151d482dff874a904f66ce878ad77445e08d925f (patch)
tree25a658b03cd20ca035deea1901cc4e3198bccf8c /src/nautilus-dbus-launcher.c
parenta221ec70be07e6c79629b87d6e1216d6a4cabd50 (diff)
downloadnautilus-151d482dff874a904f66ce878ad77445e08d925f.tar.gz
dbus-launcher: Cleanup dbus-launcher creation and freeing
nautilus_dbus_launcher_finalize() attempts to free all apps, but it's possible that they haven't all been created yet (or in the wrong order). Keep track of the last app to be created so that we only free created apps.
Diffstat (limited to 'src/nautilus-dbus-launcher.c')
-rw-r--r--src/nautilus-dbus-launcher.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/nautilus-dbus-launcher.c b/src/nautilus-dbus-launcher.c
index 25ec3930b..743b18a37 100644
--- a/src/nautilus-dbus-launcher.c
+++ b/src/nautilus-dbus-launcher.c
@@ -24,6 +24,7 @@ struct _NautilusDBusLauncher
{
GObject parent;
+ NautilusDBusLauncherApp last_app_initialized;
NautilusDBusLauncherData *data[NAUTILUS_DBUS_LAUNCHER_N_APPS];
};
@@ -165,7 +166,7 @@ nautilus_dbus_launcher_finalize (GObject *object)
{
NautilusDBusLauncher *self = NAUTILUS_DBUS_LAUNCHER (object);
- for (gint i = 0; i < NAUTILUS_DBUS_LAUNCHER_N_APPS - 1; i++)
+ for (gint i = 1; i <= self->last_app_initialized; i++)
{
g_clear_object (&self->data[i]->proxy);
g_clear_object (&self->data[i]->error);
@@ -187,10 +188,13 @@ nautilus_dbus_launcher_class_init (NautilusDBusLauncherClass *klass)
object_class->finalize = nautilus_dbus_launcher_finalize;
}
-static NautilusDBusLauncherData *
-nautilus_dbus_launcher_data_new (gboolean ping_on_creation)
+static void
+nautilus_dbus_launcher_data_init (NautilusDBusLauncher *self,
+ NautilusDBusLauncherApp app,
+ gboolean ping_on_creation)
{
NautilusDBusLauncherData *data;
+ g_assert_true (app == self->last_app_initialized + 1);
data = g_new0 (NautilusDBusLauncherData, 1);
data->proxy = NULL;
@@ -198,14 +202,15 @@ nautilus_dbus_launcher_data_new (gboolean ping_on_creation)
data->ping_on_creation = ping_on_creation;
data->cancellable = g_cancellable_new ();
- return data;
+ self->data[app] = data;
+ self->last_app_initialized = app;
}
static void
nautilus_dbus_launcher_init (NautilusDBusLauncher *self)
{
- self->data[NAUTILUS_DBUS_LAUNCHER_SETTINGS] = nautilus_dbus_launcher_data_new (FALSE);
- self->data[NAUTILUS_DBUS_LAUNCHER_DISKS] = nautilus_dbus_launcher_data_new (TRUE);
+ nautilus_dbus_launcher_data_init (self, NAUTILUS_DBUS_LAUNCHER_SETTINGS, FALSE);
+ nautilus_dbus_launcher_data_init (self, NAUTILUS_DBUS_LAUNCHER_DISKS, TRUE);
nautilus_dbus_launcher_create_proxy (self->data[NAUTILUS_DBUS_LAUNCHER_SETTINGS],
"org.gnome.Settings", "/org/gnome/Settings",