aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-manager.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-02-12 11:02:14 +0100
committerAleksander Morgado <aleksander@aleksander.es>2021-02-25 12:13:16 +0100
commitb8e076f9c47669d58179cb67a829966b867c6fe6 (patch)
treeb9e8fd255f176e16fafae5a4fdfa72cac66bdf7e /src/mm-base-manager.c
parent1b35d74c157417e40877535eec757e5cd725564f (diff)
kernel-device-udev: keep track of the client object
Instead of creating new clients internally whenever we need them, just make sure each MMKernelDeviceUdev object keeps a full reference to the GUdevClient that generated all GUdevDevices.
Diffstat (limited to 'src/mm-base-manager.c')
-rw-r--r--src/mm-base-manager.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c
index 130e5ad1..4e866f8a 100644
--- a/src/mm-base-manager.c
+++ b/src/mm-base-manager.c
@@ -407,7 +407,7 @@ handle_kernel_event (MMBaseManager *self,
g_autoptr(MMKernelDevice) kernel_device = NULL;
#if defined WITH_UDEV
if (!mm_context_get_test_no_udev ())
- kernel_device = mm_kernel_device_udev_new_from_properties (properties, error);
+ kernel_device = mm_kernel_device_udev_new_from_properties (self->priv->udev, properties, error);
else
#endif
kernel_device = mm_kernel_device_generic_new (properties, error);
@@ -436,7 +436,7 @@ handle_uevent (MMBaseManager *self,
if (g_str_equal (action, "add") || g_str_equal (action, "move") || g_str_equal (action, "change")) {
g_autoptr(MMKernelDevice) kernel_device = NULL;
- kernel_device = mm_kernel_device_udev_new (device);
+ kernel_device = mm_kernel_device_udev_new (self->priv->udev, device);
device_added (self, kernel_device, TRUE, FALSE);
return;
}
@@ -458,7 +458,7 @@ start_device_added_idle (StartDeviceAdded *ctx)
{
MMKernelDevice *kernel_device;
- kernel_device = mm_kernel_device_udev_new (ctx->device);
+ kernel_device = mm_kernel_device_udev_new (ctx->self->priv->udev, ctx->device);
device_added (ctx->self, kernel_device, FALSE, ctx->manual_scan);
g_object_unref (kernel_device);
@@ -1426,13 +1426,12 @@ initable_init (GInitable *initable,
return FALSE;
#if defined WITH_UDEV
- if (!mm_context_get_test_no_udev ()) {
- /* Create udev client based on the subsystems requested by the plugins */
- self->priv->udev = g_udev_client_new (mm_plugin_manager_get_subsystems (self->priv->plugin_manager));
- /* If autoscan enabled, list for udev events */
- if (self->priv->auto_scan)
- g_signal_connect_swapped (self->priv->udev, "uevent", G_CALLBACK (handle_uevent), initable);
- }
+ /* Create udev client based on the subsystems requested by the plugins */
+ self->priv->udev = g_udev_client_new (mm_plugin_manager_get_subsystems (self->priv->plugin_manager));
+
+ /* If autoscan enabled, list for udev events */
+ if (!mm_context_get_test_no_udev () && self->priv->auto_scan)
+ g_signal_connect_swapped (self->priv->udev, "uevent", G_CALLBACK (handle_uevent), initable);
#endif
/* Export the manager interface */