summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Berg <bberg@redhat.com>2019-03-25 09:58:29 +0100
committerBenjamin Berg <benjamin@sipsolutions.net>2019-04-15 16:23:19 +0000
commitcb2a1c37bc63386b232a8169ef992b977af4e03f (patch)
tree030ba2ffc32f0a847be562c6e790067ba8b55ff6
parent162379ed515a7af7601207b664b7003c4ca6fe02 (diff)
downloadgnome-settings-daemon-cb2a1c37bc63386b232a8169ef992b977af4e03f.tar.gz
power: Fix potential manager reference count leak
The reference would be leaked if the function returns early. Move attaching the data and register it so it gets unref'ed automatically. Note that this reference leak has no effect in normal sessions, in the worst case it prevents proper cleaup of some resources on daemon shutdown.
-rw-r--r--plugins/power/gsd-power-manager.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index c544dc7d..8225ab0e 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -2799,8 +2799,6 @@ backlight_brightness_step_cb (GObject *object,
brightness,
gsd_backlight_get_connector (backlight)));
}
-
- g_object_unref (manager);
}
/* Callback */
@@ -2830,8 +2828,6 @@ handle_method_call_screen (GsdPowerManager *manager,
GVariant *parameters,
GDBusMethodInvocation *invocation)
{
- g_object_set_data (G_OBJECT (invocation), "gsd-power-manager", g_object_ref (manager));
-
if (!manager->backlight) {
g_dbus_method_invocation_return_error_literal (invocation,
GSD_POWER_MANAGER_ERROR, GSD_POWER_MANAGER_ERROR_NO_BACKLIGHT,
@@ -2839,6 +2835,8 @@ handle_method_call_screen (GsdPowerManager *manager,
return;
}
+ g_object_set_data_full (G_OBJECT (invocation), "gsd-power-manager", g_object_ref (manager), g_object_unref);
+
if (g_strcmp0 (method_name, "StepUp") == 0) {
g_debug ("screen step up");
gsd_backlight_step_up_async (manager->backlight, NULL, backlight_brightness_step_cb, invocation);