diff --git a/src/solid/devices/backends/udisks2/udisksmanager.cpp b/src/solid/devices/backends/udisks2/udisksmanager.cpp --- a/src/solid/devices/backends/udisks2/udisksmanager.cpp +++ b/src/solid/devices/backends/udisks2/udisksmanager.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include "../shared/rootdevice.h" @@ -212,11 +213,17 @@ qDebug() << udi << "lost interfaces:" << interfaces; + if (udi.isEmpty()) { + return; + } + updateBackend(udi); - Device device(udi); + const QDir dir(udi); - if (!udi.isEmpty() && (interfaces.isEmpty() || device.interfaces().isEmpty())) { + if (!dir.exists() || dir.isEmpty() + || interfaces.contains(UD2_DBUS_INTERFACE_FILESYSTEM) + || interfaces.contains(UD2_DBUS_INTERFACE_LOOP)) { emit deviceRemoved(udi); m_deviceCache.removeAll(udi); DeviceBackend::destroyBackend(udi);