[gnome-control-center] power: Fix crash when panel is closed quickly
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] power: Fix crash when panel is closed quickly
- Date: Tue, 20 Feb 2018 10:00:46 +0000 (UTC)
commit d2f11556396df1254ccc27e46aa06eb1165c0a60
Author: Bastien Nocera <hadess hadess net>
Date: Tue Feb 20 10:55:25 2018 +0100
power: Fix crash when panel is closed quickly
Another use-after-free on cancellation crash.
#0 g_type_check_instance_cast (type_instance=type_instance@entry=0x1eac3c0, iface_type=32150864) at
/glib/gobject/gtype.c:4057
#1 0x0000000000494077 in got_screen_proxy_cb (source_object=<optimized out>, res=0x1eceab0,
user_data=user_data@entry=0x1eac3c0)
at panels/power/cc-power-panel.c:1083
https://bugzilla.gnome.org/show_bug.cgi?id=789464
panels/power/cc-power-panel.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
---
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index d02077de7..aff0ae8e6 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -1080,11 +1080,11 @@ static void
got_screen_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 *screen_proxy;
- priv->screen_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
- if (priv->screen_proxy == NULL)
+ screen_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+ if (screen_proxy == NULL)
{
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_printerr ("Error creating screen proxy: %s\n", error->message);
@@ -1092,8 +1092,11 @@ got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_da
return;
}
+ self = CC_POWER_PANEL (user_data);
+ self->priv->screen_proxy = screen_proxy;
+
/* we want to change the bar if the user presses brightness buttons */
- g_signal_connect (priv->screen_proxy, "g-properties-changed",
+ g_signal_connect (screen_proxy, "g-properties-changed",
G_CALLBACK (on_screen_property_change), self);
sync_screen_brightness (self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]