common: Fix again tracking of udev device removals

This got fixed in commit 008b1f68c8, and broken again the very same
way in commit 3600cb5a40. Go me.
This commit is contained in:
Carlos Garnacho 2019-12-05 16:20:02 +01:00
parent 1ce1fbe3c8
commit 62d69fb313

View file

@ -422,6 +422,7 @@ add_device (GsdDeviceManager *manager,
GsdDeviceManagerPrivate *priv = gsd_device_manager_get_instance_private (manager); GsdDeviceManagerPrivate *priv = gsd_device_manager_get_instance_private (manager);
GUdevDevice *parent; GUdevDevice *parent;
GsdDevice *device; GsdDevice *device;
const gchar *syspath;
parent = g_udev_device_get_parent (udev_device); parent = g_udev_device_get_parent (udev_device);
@ -429,7 +430,8 @@ add_device (GsdDeviceManager *manager,
return; return;
device = create_device (udev_device); device = create_device (udev_device);
g_hash_table_insert (priv->devices, g_object_ref (udev_device), device); syspath = g_udev_device_get_sysfs_path (udev_device);
g_hash_table_insert (priv->devices, g_strdup (syspath), device);
g_signal_emit_by_name (manager, "device-added", device); g_signal_emit_by_name (manager, "device-added", device);
} }
@ -439,17 +441,18 @@ remove_device (GsdDeviceManager *manager,
{ {
GsdDeviceManagerPrivate *priv = gsd_device_manager_get_instance_private (manager); GsdDeviceManagerPrivate *priv = gsd_device_manager_get_instance_private (manager);
GsdDevice *device; GsdDevice *device;
const gchar *syspath;
device = g_hash_table_lookup (priv->devices, udev_device); syspath = g_udev_device_get_sysfs_path (udev_device);
device = g_hash_table_lookup (priv->devices, syspath);
if (!device) if (!device)
return; return;
g_hash_table_steal (priv->devices, udev_device); g_hash_table_steal (priv->devices, syspath);
g_signal_emit_by_name (manager, "device-removed", device); g_signal_emit_by_name (manager, "device-removed", device);
g_object_unref (device); g_object_unref (device);
g_object_unref (udev_device);
} }
static void static void
@ -476,8 +479,8 @@ gsd_device_manager_init (GsdDeviceManager *manager)
g_autoptr(GList) devices = NULL; g_autoptr(GList) devices = NULL;
GList *l; GList *l;
priv->devices = g_hash_table_new_full (NULL, NULL, priv->devices = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify) g_object_unref, (GDestroyNotify) g_free,
(GDestroyNotify) g_object_unref); (GDestroyNotify) g_object_unref);
priv->udev_client = g_udev_client_new (subsystems); priv->udev_client = g_udev_client_new (subsystems);