diff options
Diffstat (limited to 'src/linux/up-backend.c')
-rw-r--r-- | src/linux/up-backend.c | 36 |
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); |