[gnome-settings-daemon/wip/benzea/keybindings-grabbing-rework-3-32: 3/4] media-keys: Do not create weak references to GCancellable's



commit 9cc306a6e276bd945cd589f8f4010fbf59e2c650
Author: Benjamin Berg <bberg redhat com>
Date:   Fri Feb 8 17:09:10 2019 +0100

    media-keys: Do not create weak references to GCancellable's
    
    The ensure_cancellable function was only ever called once. Also, the
    cancellable may survive longer than the object so adding a weak
    reference without removing it again potentially causes a use-after-free
    situation.
    
    Simply replacing it with g_cancellable_new makes things safe and also
    simpler.

 plugins/media-keys/gsd-media-keys-manager.c | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)
---
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 0847420c..929bfb1d 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -362,18 +362,6 @@ get_binding (GsdMediaKeysManager *manager,
                g_assert_not_reached ();
 }
 
-static void
-ensure_cancellable (GCancellable **cancellable)
-{
-        if (*cancellable == NULL) {
-                *cancellable = g_cancellable_new ();
-                g_object_add_weak_pointer (G_OBJECT (*cancellable),
-                                           (gpointer *)cancellable);
-        } else {
-                g_object_ref (*cancellable);
-        }
-}
-
 static void
 show_osd_with_max_level (GsdMediaKeysManager *manager,
                          const char          *icon,
@@ -2985,9 +2973,9 @@ start_media_keys_idle_cb (GsdMediaKeysManager *manager)
        }
        manager->priv->icon_theme = g_settings_get_string (manager->priv->interface_settings, "icon-theme");
 
-        ensure_cancellable (&manager->priv->grab_cancellable);
-        ensure_cancellable (&manager->priv->screencast_cancellable);
-        ensure_cancellable (&manager->priv->rfkill_cancellable);
+        manager->priv->grab_cancellable = g_cancellable_new ();
+        manager->priv->screencast_cancellable = g_cancellable_new ();
+        manager->priv->rfkill_cancellable = g_cancellable_new ();
 
         manager->priv->shell_proxy = gnome_settings_bus_get_shell_proxy ();
         g_signal_connect_swapped (manager->priv->shell_proxy, "notify::g-name-owner",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]