gdk/x11: Properly unref removed device in XI2 device manager
authorSebastian Keller <skeller@gnome.org>
Mon, 27 Jan 2020 00:02:29 +0000 (01:02 +0100)
committerSebastian Keller <skeller@gnome.org>
Mon, 27 Jan 2020 20:42:34 +0000 (21:42 +0100)
When a device is added, there are two references to it by the device
manager, the initial one and the one used for the id_table. Removing a
device only removed the reference added by the id_table resulting in the
GdkDevice being leaked.

https://gitlab.gnome.org/GNOME/gtk/merge_requests/1358

gdk/x11/gdkdevicemanager-xi2.c

index 645e992c38cee54ffbbb37259bdc7926024356eb..86bf669c8a5e2d558ab7ef8c47a65523caa6baea 100644 (file)
@@ -685,12 +685,13 @@ remove_device (GdkX11DeviceManagerXI2 *device_manager,
   if (device)
     {
       detach_from_seat (device);
-      device_manager->devices = g_list_remove (device_manager->devices, device);
-
-      g_object_run_dispose (G_OBJECT (device));
 
       g_hash_table_remove (device_manager->id_table,
                            GINT_TO_POINTER (device_id));
+
+      device_manager->devices = g_list_remove (device_manager->devices, device);
+      g_object_run_dispose (G_OBJECT (device));
+      g_object_unref (device);
     }
 }