shell-util: Fix a memory leak of a floating variant on error
If `params` is floating when provided by the caller, and if one of the early return paths is taken from this function, the call into GIO never sinks and takes ownership of the `GVariant`, and hence it’s leaked. Always explicitly sink the input variant as soon as the function is called, then it can’t be leaked. Signed-off-by: Philip Withnall <pwithnall@gnome.org> Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3396>
This commit is contained in:
parent
9a1b0a635f
commit
976c99c5e3
@ -619,6 +619,7 @@ shell_util_systemd_call (const char *command,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
g_autoptr (GTask) task = g_task_new (NULL, cancellable, callback, user_data);
|
g_autoptr (GTask) task = g_task_new (NULL, cancellable, callback, user_data);
|
||||||
|
g_autoptr (GVariant) params_owned = g_variant_ref_sink (g_steal_pointer (¶ms));
|
||||||
|
|
||||||
#ifdef HAVE_SYSTEMD
|
#ifdef HAVE_SYSTEMD
|
||||||
g_autoptr (GDBusConnection) connection = NULL;
|
g_autoptr (GDBusConnection) connection = NULL;
|
||||||
@ -695,7 +696,7 @@ shell_util_systemd_call (const char *command,
|
|||||||
"/org/freedesktop/systemd1",
|
"/org/freedesktop/systemd1",
|
||||||
"org.freedesktop.systemd1.Manager",
|
"org.freedesktop.systemd1.Manager",
|
||||||
command,
|
command,
|
||||||
params,
|
params_owned,
|
||||||
G_VARIANT_TYPE ("(o)"),
|
G_VARIANT_TYPE ("(o)"),
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
-1, cancellable,
|
-1, cancellable,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user