Bug 464149

Summary: Q_ASSERT(dev->backendObject() != nullptr);
Product: [Frameworks and Libraries] frameworks-solid Reporter: Christoph Cullmann <christoph>
Component: generalAssignee: Unassigned bugs mailing-list <unassigned-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: christoph, isma.af, jjm, kdelibs-bugs, lukas, nate
Priority: NOR    
Version: 5.101.0   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed In: 6.8
Sentry Crash Report:

Description Christoph Cullmann 2023-01-11 13:30:10 UTC
On ejecting a DVD I got

Error getting props: "org.freedesktop.DBus.Error.InvalidArgs" "No such interface “org.freedesktop.UDisks2.Filesystem”" for "/org/freedesktop/UDisks2/block_devices/sr0"
ASSERT: "dev->backendObject() != nullptr" in file /local/hdd/gebhard/kde/src/frameworks/solid/src/solid/devices/frontend/devicemanager.cpp, line 234

I would propose to relax the code


void Solid::DeviceManagerPrivate::_k_deviceRemoved(const QString &udi)
{
    if (m_devicesMap.contains(udi)) {
        DevicePrivate *dev = m_devicesMap[udi].data();

        // Ok, this one was requested somewhere was valid
        // and now becomes magically invalid!

        if (dev) {
            Q_ASSERT(dev->backendObject() != nullptr);
            dev->setBackendObject(nullptr);
            Q_ASSERT(dev->backendObject() == nullptr);
        }
    }

    Q_EMIT deviceRemoved(udi);
}
Comment 1 Bug Janitor Service 2024-05-01 19:20:49 UTC
A possibly relevant merge request was started @ https://invent.kde.org/frameworks/solid/-/merge_requests/165
Comment 2 Christoph Cullmann 2024-05-03 10:25:06 UTC
*** Bug 458609 has been marked as a duplicate of this bug. ***
Comment 3 Christoph Cullmann 2024-05-03 10:27:35 UTC
Git commit f099efda7a38e7f3651a802a44cd7e125b065dc1 by Christoph Cullmann.
Committed on 03/05/2024 at 10:23.
Pushed by cullmann into branch 'master'.

remove too aggressive assert

can happen during runtime, we set it to nullptr anyways,
just remove the assert

M  +0    -1    src/solid/devices/frontend/devicemanager.cpp

https://invent.kde.org/frameworks/solid/-/commit/f099efda7a38e7f3651a802a44cd7e125b065dc1
Comment 4 Bug Janitor Service 2024-09-01 21:29:23 UTC
A possibly relevant merge request was started @ https://invent.kde.org/frameworks/solid/-/merge_requests/172
Comment 5 Christoph Cullmann 2024-10-19 10:29:58 UTC
Git commit 99510948944ecda04f9cec6b3bd94b140d191a1c by Christoph Cullmann, on behalf of Nicolas Fella.
Committed on 19/10/2024 at 10:27.
Pushed by cullmann into branch 'master'.

[udisks] Don't add/remove devices in slotMediaChanged

We get notified when devices are added via
InterfacesAdded/InterfacesRemoved.

When ejecting from a CD drive we first get slotMediaChanged, where we
remove the device from m_deviceCache. Then we get InterfacesRemoved
for org.freedesktop.UDisks2.Filesystem. Because the
org.freedesktop.UDisks2.Block interface is still there we remove and
immediately readd the device. Then in DeviceManagerPrivate::_k_deviceAdded
we call createBackendObject, which fails to create a backend because
the uid is not in m_deviceCache any more. Then we assert because the
backend is empty.

SENTRY: KIO-6S

SENTRY: KONTACT-FM

SENTRY: KDED-P

SENTRY: PLASMA-WORKSPACE-SMH

SENTRY: ARK-5T

SENTRY: DOLPHIN-218

M  +0    -13   src/solid/devices/backends/udisks2/udisksmanager.cpp

https://invent.kde.org/frameworks/solid/-/commit/99510948944ecda04f9cec6b3bd94b140d191a1c