diff options
author | Marco Trevisan <mail@3v1n0.net> | 2022-09-02 20:12:50 +0000 |
---|---|---|
committer | Marco Trevisan <mail@3v1n0.net> | 2022-09-02 20:12:50 +0000 |
commit | 1d9a362bc76ebf26b9d1e3059ea2a2d402af6169 (patch) | |
tree | fc39540a53946821d9cdc17bee2cd8b9b1d7cdcc | |
parent | 88d4b3b365a32f03e6522469115a9075ffae0463 (diff) | |
parent | 74f01defd4f46245ac35b88ada16afbb11bf0e8c (diff) | |
download | glib-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.yml | 2 | ||||
-rw-r--r-- | gio/gdesktopappinfo.c | 11 | ||||
-rw-r--r-- | gio/tests/gdbus-peer.c | 1 | ||||
-rw-r--r-- | gio/tests/gdbus-proxy-threads.c | 12 |
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 |