summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Trevisan <mail@3v1n0.net>2022-09-02 20:12:50 +0000
committerMarco Trevisan <mail@3v1n0.net>2022-09-02 20:12:50 +0000
commit1d9a362bc76ebf26b9d1e3059ea2a2d402af6169 (patch)
treefc39540a53946821d9cdc17bee2cd8b9b1d7cdcc
parent88d4b3b365a32f03e6522469115a9075ffae0463 (diff)
parent74f01defd4f46245ac35b88ada16afbb11bf0e8c (diff)
downloadglib-1d9a362bc76ebf26b9d1e3059ea2a2d402af6169.tar.gz
Merge branch 'fix-some-variant-leaks' into 'main'
tests, GDesktopAppInfo: Fix various GVariant leaks See merge request GNOME/glib!2874
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--gio/gdesktopappinfo.c11
-rw-r--r--gio/tests/gdbus-peer.c1
-rw-r--r--gio/tests/gdbus-proxy-threads.c12
4 files changed, 21 insertions, 5 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e4cc3ede5..9f1e511b8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -212,7 +212,7 @@ valgrind:
stage: analysis
needs: []
variables:
- MESON_TEST_TIMEOUT_MULTIPLIER: 10
+ MESON_TEST_TIMEOUT_MULTIPLIER: 15
script:
- meson ${MESON_COMMON_OPTIONS}
--werror
diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c
index 85b424dda..52d308f54 100644
--- a/gio/gdesktopappinfo.c
+++ b/gio/gdesktopappinfo.c
@@ -3108,6 +3108,9 @@ launch_uris_with_dbus_signal_cb (GObject *object,
if (data->callback)
data->callback (object, result, data->user_data);
+ else if (!g_task_had_error (G_TASK (result)))
+ g_variant_unref (g_dbus_connection_call_finish (G_DBUS_CONNECTION (object),
+ result, NULL));
launch_uris_with_dbus_data_free (data);
}
@@ -3280,15 +3283,19 @@ launch_uris_with_dbus_cb (GObject *object,
{
GTask *task = G_TASK (user_data);
GError *local_error = NULL;
+ GVariant *ret;
- g_dbus_connection_call_finish (G_DBUS_CONNECTION (object), result, &local_error);
+ ret = g_dbus_connection_call_finish (G_DBUS_CONNECTION (object), result, &local_error);
if (local_error != NULL)
{
g_dbus_error_strip_remote_error (local_error);
g_task_return_error (task, g_steal_pointer (&local_error));
}
else
- g_task_return_boolean (task, TRUE);
+ {
+ g_task_return_boolean (task, TRUE);
+ g_variant_unref (ret);
+ }
g_object_unref (task);
}
diff --git a/gio/tests/gdbus-peer.c b/gio/tests/gdbus-peer.c
index 7179d089d..763689a4f 100644
--- a/gio/tests/gdbus-peer.c
+++ b/gio/tests/gdbus-peer.c
@@ -843,6 +843,7 @@ do_test_peer (void)
error = NULL;
value = g_dbus_proxy_get_cached_property (proxy, "PeerProperty");
g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "ThePropertyValue");
+ g_clear_pointer (&value, g_variant_unref);
/* try invoking a method */
error = NULL;
diff --git a/gio/tests/gdbus-proxy-threads.c b/gio/tests/gdbus-proxy-threads.c
index 76b857e73..a0a38d07c 100644
--- a/gio/tests/gdbus-proxy-threads.c
+++ b/gio/tests/gdbus-proxy-threads.c
@@ -119,13 +119,17 @@ request_name_cb (GObject *source,
GDBusConnection *connection = G_DBUS_CONNECTION (source);
GError *error = NULL;
GVariant *var;
+ GVariant *child;
var = g_dbus_connection_call_finish (connection, res, &error);
g_assert_no_error (error);
- g_assert_cmpuint (g_variant_get_uint32 (g_variant_get_child_value (var, 0)),
+ child = g_variant_get_child_value (var, 0);
+ g_assert_cmpuint (g_variant_get_uint32 (child),
==, DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER);
release_name (connection, TRUE);
+ g_variant_unref (child);
+ g_variant_unref (var);
}
static void
@@ -154,11 +158,13 @@ release_name_cb (GObject *source,
GDBusConnection *connection = G_DBUS_CONNECTION (source);
GError *error = NULL;
GVariant *var;
+ GVariant *child;
int i;
var = g_dbus_connection_call_finish (connection, res, &error);
g_assert_no_error (error);
- g_assert_cmpuint (g_variant_get_uint32 (g_variant_get_child_value (var, 0)),
+ child = g_variant_get_child_value (var, 0);
+ g_assert_cmpuint (g_variant_get_uint32 (child),
==, DBUS_RELEASE_NAME_REPLY_RELEASED);
/* generate some rapid NameOwnerChanged signals to try to trigger crashes */
@@ -170,6 +176,8 @@ release_name_cb (GObject *source,
/* wait for dbus-daemon to catch up */
request_name (connection, TRUE);
+ g_variant_unref (child);
+ g_variant_unref (var);
}
static void