summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Berg <bberg@redhat.com>2018-03-05 16:12:48 +0100
committerBastien Nocera <hadess@hadess.net>2018-03-05 16:47:52 +0100
commit1d72a0b3507d425011a4d280ebbe53f3463d3ed9 (patch)
tree511251f238e1d0b36f879010b0cb8b6b968db5af
parent9066ce5525f37fc186123b2872a080a9ee4b10ce (diff)
downloadgnome-control-center-1d72a0b3507d425011a4d280ebbe53f3463d3ed9.tar.gz
power: Fix crash when panel is closed quickly
Fix a use-after-free while creating the dbus proxy for org.gnome.SettingsDaemon.Power.Keyboard. This fix is identical to the previous fix for the screen proxy. https://bugzilla.gnome.org/show_bug.cgi?id=794089
-rw-r--r--panels/power/cc-power-panel.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index aff0ae8e6..f9b67a458 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -1117,11 +1117,11 @@ static void
got_kbd_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
GError *error = NULL;
- CcPowerPanel *self = CC_POWER_PANEL (user_data);
- CcPowerPanelPrivate *priv = self->priv;
+ CcPowerPanel *self;
+ GDBusProxy *kbd_proxy;
- priv->kbd_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
- if (priv->kbd_proxy == NULL)
+ kbd_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+ if (kbd_proxy == NULL)
{
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_printerr ("Error creating keyboard proxy: %s\n", error->message);
@@ -1129,8 +1129,11 @@ got_kbd_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
return;
}
+ self = CC_POWER_PANEL (user_data);
+ self->priv->kbd_proxy = kbd_proxy;
+
/* we want to change the bar if the user presses brightness buttons */
- g_signal_connect (priv->kbd_proxy, "g-properties-changed",
+ g_signal_connect (kbd_proxy, "g-properties-changed",
G_CALLBACK (on_kbd_property_change), self);
sync_kbd_brightness (self);