summaryrefslogtreecommitdiff
path: root/src/linux/up-backend.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/linux/up-backend.c')
-rw-r--r--src/linux/up-backend.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/src/linux/up-backend.c b/src/linux/up-backend.c
index f45ce29..71e7ef8 100644
--- a/src/linux/up-backend.c
+++ b/src/linux/up-backend.c
@@ -340,6 +340,36 @@ up_backend_coldplug (UpBackend *backend, UpDaemon *daemon)
return TRUE;
}
+/**
+ * up_backend_unplug:
+ *
+ * Initiates destruction of %UpBackend, undoing the effects of
+ * up_backend_coldplug.
+ */
+void
+up_backend_unplug (UpBackend *backend)
+{
+ GList *keys, *item;
+ GUdevDevice *native;
+
+ if (backend->priv->gudev_client != NULL && backend->priv->device_list != NULL) {
+ keys = up_device_list_get_keys (backend->priv->device_list);
+ for (item = keys; item != NULL; item = item->next) {
+ native = g_udev_client_query_by_sysfs_path (backend->priv->gudev_client, item->data);
+ if (native != NULL)
+ up_backend_device_remove (backend, native);
+ }
+ g_list_free (keys);
+ }
+
+ if (backend->priv->gudev_client != NULL)
+ g_object_unref (backend->priv->gudev_client);
+ if (backend->priv->device_list != NULL)
+ g_object_unref (backend->priv->device_list);
+ if (backend->priv->daemon != NULL)
+ g_object_unref (backend->priv->daemon);
+}
+
static gboolean
check_action_result (GVariant *result)
{
@@ -495,12 +525,6 @@ up_backend_finalize (GObject *object)
backend = UP_BACKEND (object);
g_object_unref (backend->priv->config);
- if (backend->priv->daemon != NULL)
- g_object_unref (backend->priv->daemon);
- if (backend->priv->device_list != NULL)
- g_object_unref (backend->priv->device_list);
- if (backend->priv->gudev_client != NULL)
- g_object_unref (backend->priv->gudev_client);
g_clear_object (&backend->priv->logind_proxy);
g_object_unref (backend->priv->managed_devices);