diff options
author | Richard Hughes <richard@hughsie.com> | 2016-03-15 15:38:22 +0000 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2016-03-16 00:35:15 +0100 |
commit | 5fad0bb3c3ff95f436faa1235a5a5fdaf16ad2f7 (patch) | |
tree | e26e1fb06deca43e0a275205d660fe210df0f188 | |
parent | c41c90ae014b61a7dce12ee1886035e95e997725 (diff) | |
download | gnome-settings-daemon-5fad0bb3c3ff95f436faa1235a5a5fdaf16ad2f7.tar.gz |
color: Fix a crash when cancelling setting up screens
https://bugzilla.gnome.org/show_bug.cgi?id=763382
-rw-r--r-- | plugins/color/gsd-color-state.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/plugins/color/gsd-color-state.c b/plugins/color/gsd-color-state.c index 948ee071..061e4145 100644 --- a/plugins/color/gsd-color-state.c +++ b/plugins/color/gsd-color-state.c @@ -1358,10 +1358,18 @@ on_rr_screen_acquired (GObject *object, GsdColorState *state = data; GsdColorStatePrivate *priv = state->priv; GnomeRRScreen *screen; + GError *error = NULL; - screen = gnome_rr_screen_new_finish (result, NULL); - if (!screen) - return; + /* gnome_rr_screen_new_async() does not take a GCancellable */ + if (g_cancellable_is_cancelled (priv->cancellable)) + goto out; + + screen = gnome_rr_screen_new_finish (result, &error); + if (screen == NULL) { + g_warning ("failed to get screens: %s", error->message); + g_error_free (error); + goto out; + } priv->state_screen = screen; @@ -1369,6 +1377,9 @@ on_rr_screen_acquired (GObject *object, priv->cancellable, gcm_session_client_connect_cb, state); +out: + /* manually added */ + g_object_unref (state); } void @@ -1384,7 +1395,7 @@ gsd_color_state_start (GsdColorState *state) /* coldplug the list of screens */ gnome_rr_screen_new_async (gdk_screen_get_default (), on_rr_screen_acquired, - state); + g_object_ref (state)); } void |