common: Fix again tracking of udev device removals
This got fixed in commit008b1f68c8
, and broken again the very same way in commit3600cb5a40
. Go me.
This commit is contained in:
parent
1ce1fbe3c8
commit
62d69fb313
1 changed files with 11 additions and 8 deletions
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue