Bug 467827 - Discover crash upon startup in FlatpakBackend::getAppForInstalledRef() after failing to find flathub
Summary: Discover crash upon startup in FlatpakBackend::getAppForInstalledRef() after ...
Status: RESOLVED FIXED
Alias: None
Product: Discover
Classification: Applications
Component: Flatpak Backend (show other bugs)
Version: 5.27.2
Platform: Fedora RPMs Linux
: NOR crash
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-03-26 20:26 UTC by Berk Elyesa Yıldırım
Modified: 2023-04-14 23:24 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments
backtrace (25.46 KB, text/x-log)
2023-03-26 20:26 UTC, Berk Elyesa Yıldırım
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Berk Elyesa Yıldırım 2023-03-26 20:26:51 UTC
Created attachment 157600 [details]
backtrace

SUMMARY
Sometimes discover "can't find flathub" and doesn't launch.
`Could not find source: 0x7fffa001c240 "flathub"` (0x number probably doesn't matter)

Very out of ordinary actually, randomly happens after an update is available from flathub.
Even though I couldn't trigger intentionally(can't give virtual updates by myself), I highly guess it's related to nvidia flatpak updates as it regularly happens right after I get an nvidia update on system side.

OBSERVED RESULT
Discover crashes upon startup, before any gui is shown.

EXPECTED RESULT
Discover launched properly (obviously 😅)
Maybe temporarily ignore the broken backend instead of crashing and warn the user about "unexpected issue with the flatpak backend: couldn't find flathub" without forcing the user to use command line.

SOFTWARE/OS VERSIONS
Linux: Fedora 37 kernel 6.2
KDE Plasma Version: 5.27.3
KDE Frameworks Version: 5.104.0
Qt Version: 5.15.8

ADDITIONAL INFORMATION
Can be worked around by using gnome-software or flatpak cli, then discover no longer breaks. Can't trigger again until an update though, making it harder to reproduce. I got the backtrace in 5.27.2 but it's not introduced in that release nor fixed in .3, it's just that I couldn't get my way to report.

Attached backtrace, my first bug report, hope it's useful (⁠✿⁠^⁠‿⁠^⁠)
Comment 1 Nate Graham 2023-04-04 23:40:47 UTC
Thanks, that's a great backtrace. Pasting it inline for searchability:

Thread 1 (Thread 0x7ffff16d9940 (LWP 18288) "plasma-discover"):
#0  0x00007fffbc319f3d in FlatpakBackend::getAppForInstalledRef(_FlatpakInstallation*, _FlatpakInstalledRef*, bool*) const (this=this@entry=0x555555b16320, installation=installation@entry=0x7fff9c004ad0, ref=ref@entry=0x555555ab3c10, freshResource=freshResource@entry=0x0) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:522
        origin = {d = 0x555555b94e30}
        source = {value = 0x0, d = 0x0}
        pathExports = {d = 0x555555b8a120}
        pathApps = {d = 0x555555b50da0}
        refId = {d = 0x555555b0d370}
        cid = {m_cpt = 0x555555b6d360}
        resource = <optimized out>
#1  0x00007fffbc31b868 in FlatpakBackend::loadLocalUpdates(_FlatpakInstallation*) (flatpakInstallation=0x7fff9c004ad0, this=0x555555b16320) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:1149
        ref = 0x555555ab3c10
        latestCommit = 0x555555b5b460 "2036d952f295ada5fd8e7d9f2462dc5ddcec42ef647100315bb3691503091bae"
        commit = <optimized out>
        resource = <optimized out>
        i = 2
        localError = 0x0
        refs = 0x555555b4cf00
        installation = 0x7fff9c004ad0
        __for_range = @0x555555b16378: {d = 0x555555b426a0}
        __for_begin = 0x555555b426c0
        __for_end = 0x555555b426c8
#2  FlatpakBackend::metadataRefreshed(_FlatpakRemote*) (remote=<optimized out>, this=0x555555b16320) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:1040
        installation = 0x7fff9c004ad0
        __for_range = @0x555555b16378: {d = 0x555555b426a0}
        __for_begin = 0x555555b426c0
        __for_end = 0x555555b426c8
#3  FlatpakBackend::metadataRefreshed(_FlatpakRemote*) (this=this@entry=0x555555b16320, remote=<optimized out>, remote@entry=0x555555b38150) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:1033
#4  0x00007fffbc31d24a in FlatpakBackend::integrateRemote(_FlatpakInstallation*, _FlatpakRemote*) (this=<optimized out>, flatpakInstallation=<optimized out>, remote=<optimized out>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:1116
        source = {value = 0x555555b4e9a0, d = 0x555555b4e990}
#5  0x00007fffbc327413 in FlatpakBackend::checkForRemoteUpdates(_FlatpakInstallation*, _FlatpakRemote*) (this=0x555555b16320, installation=0x7fffa000ab40, remote=<optimized out>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:1839
        needsIntegration = true
        job = <optimized out>
#6  0x00007fffbc31f673 in FlatpakBackend::loadRemote(_FlatpakInstallation*, _FlatpakRemote*) (this=0x555555b16320, installation=0x7fffa000ab40, remote=<optimized out>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:1007
        fileTimestamp = 0x555555b4c940
        path_str = 0x555555b559f0 "/var/lib/flatpak/appstream/fedora-testing/x86_64/.timestamp"
        fileInfo = {d_ptr = {d = 0x555555a78800}}
#7  0x00007fffbc30ece9 in FlatpakBackend::loadAppsFromAppstreamData(_FlatpakInstallation*) (flatpakInstallation=0x7fffa000ab40, this=0x555555b16320) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:992
        remote = <optimized out>
        i = 0
        error = 0x0
        remotes = 0x555555b48e80
        installation = 0x7fffa000ab40
        __for_range = @0x555555b16378: {d = 0x555555b426a0}
        __for_begin = 0x555555b426b8
        __for_end = 0x555555b426c8
        error = 0x0
        c = <optimized out>
#8  FlatpakBackend::loadAppsFromAppstreamData() (this=0x555555b16320) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:973
        installation = 0x7fffa000ab40
        __for_range = @0x555555b16378: {d = 0x555555b426a0}
        __for_begin = 0x555555b426b8
        __for_end = 0x555555b426c8
        error = 0x0
        c = <optimized out>
#9  FlatpakBackend::FlatpakBackend(QObject*) (parent=<optimized out>, this=0x555555b16320) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:302
        error = 0x0
        c = <optimized out>
#10 FlatpakBackendFactory::newInstance(QObject*, QString const&) const (this=<optimized out>, parent=<optimized out>, name=...) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp:57
        c = <optimized out>
#11 0x00007ffff7ec9509 in DiscoverBackendsFactory::backendForFile(QString const&, QString const&) const (this=this@entry=0x7fffffffd2cf, libname=..., name=...) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/DiscoverBackendsFactory.cpp:58
        loader = 0x555555b0b680
        f = <optimized out>
        instances = {d = 0xc95663a3f71dc700}
#12 0x00007ffff7ec9a5f in DiscoverBackendsFactory::backend(QString const&) const (this=this@entry=0x7fffffffd2cf, name=...) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/DiscoverBackendsFactory.cpp:44
#13 0x00007ffff7ec9bcb in operator() (name=..., __closure=<synthetic pointer>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/DiscoverBackendsFactory.cpp:95
        v = @0x555555a78dd0: {d = 0x555555a78d40}
        __for_range = @0x7fffffffd240: {<QList<QString>> = {<QListSpecialMethods<QString>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = std::atomic<int> = { -1 }}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x555555a78db0}, d = 0x555555a78db0}}, <No data fields>}
        names = {<QList<QString>> = {<QListSpecialMethods<QString>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = std::atomic<int> = { -1 }}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x555555a78db0}, d = 0x555555a78db0}}, <No data fields>}
        ret = {d = 0x555555ab7b70}
#14 kTransform<QVector<AbstractResourcesBackend*>, QStringList, DiscoverBackendsFactory::allBackends() const::<lambda(const QString&)> > (op=..., input=...) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/utils.h:53
        v = @0x555555a78dd0: {d = 0x555555a78d40}
        __for_range = @0x7fffffffd240: {<QList<QString>> = {<QListSpecialMethods<QString>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = std::atomic<int> = { -1 }}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x555555a78db0}, d = 0x555555a78db0}}, <No data fields>}
        names = {<QList<QString>> = {<QListSpecialMethods<QString>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = std::atomic<int> = { -1 }}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x555555a78db0}, d = 0x555555a78db0}}, <No data fields>}
        ret = {d = 0x555555ab7b70}
#15 DiscoverBackendsFactory::allBackends() const (this=0x7fffffffd2cf) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/DiscoverBackendsFactory.cpp:96
        names = {<QList<QString>> = {<QListSpecialMethods<QString>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = std::atomic<int> = { -1 }}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x555555a78db0}, d = 0x555555a78db0}}, <No data fields>}
        ret = {d = 0x555555ab7b70}
#16 0x00007ffff7eb5e99 in ResourcesModel::registerAllBackends() (this=0x555555a6fdc0) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/resources/ResourcesModel.cpp:237
        f = {<No data fields>}
        backends = {d = 0x555555ab7b70}
#17 0x00007ffff7eafa38 in ResourcesModel::init(bool) (this=this@entry=0x555555a6fdc0, load=load@entry=true) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/resources/ResourcesModel.cpp:94
#18 0x00007ffff7eafa97 in ResourcesModel::global() () at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/resources/ResourcesModel.cpp:37
#19 0x00007ffff7ea6165 in CategoryModel::CategoryModel(QObject*) (this=0x555555a6fb80, parent=<optimized out>, this=<optimized out>, parent=<optimized out>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/Category/CategoryModel.cpp:22
        t = 0x555555a6fc10
#20 0x00007ffff7ea6375 in CategoryModel::global() () at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/libdiscover/Category/CategoryModel.cpp:39
        instance = 0x0
#21 0x000055555558972f in DiscoverDeclarativePlugin::registerTypes(char const*) (this=<optimized out>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/discover/DiscoverDeclarativePlugin.cpp:57
#22 0x0000555555575eba in DiscoverObject::DiscoverObject(DiscoverObject::CompactMode, QMap<QString, QVariant> const&) (this=0x5555559efce0, mode=<optimized out>, initialProperties=<optimized out>, this=<optimized out>, mode=<optimized out>, initialProperties=<optimized out>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/discover/DiscoverObject.cpp:136
        factory = <optimized out>
        uri = 0x555555591126 "org.kde.discover"
        plugin = 0x555555a682f0
        action = <optimized out>
#23 0x000055555556daa8 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/plasma-discover-5.27.2-1.fc37.x86_64/discover/main.cpp:176
        options = {<QList<QString>> = {<QListSpecialMethods<QString>> = {<No data fields>}, {p = {d = 0x7ffff5d6dd50 <QListData::shared_null>}, d = 0x7ffff5d6dd50 <QListData::shared_null>}}, <No data fields>}
        initialProperties = {d = 0x7ffff5d6dd80 <QMapDataBase::shared_null>}
        parser = {d = <optimized out>}
        feedback = <optimized out>
        service = <optimized out>
        format = {d = 0x5555555d5640}
        app = <incomplete type>
        about = {d = std::unique_ptr<KAboutDataPrivate> = {get() = 0x5555559b48b0}}
        mainWindow = 0x0
Comment 2 Nate Graham 2023-04-04 23:41:07 UTC
We definitely shouldn't crash here. Maybe we should have it try again a few times to account for network flakiness.
Comment 3 Bug Janitor Service 2023-04-14 00:58:47 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/discover/-/merge_requests/535
Comment 4 Aleix Pol 2023-04-14 23:21:22 UTC
Git commit 2bed299745d7c56c53191e46a8affe89f19c0491 by Aleix Pol Gonzalez, on behalf of Aleix Pol.
Committed on 14/04/2023 at 13:39.
Pushed by apol into branch 'Plasma/5.27'.

flatpak: Do not crash if for any reason we lack a ref's source

M  +19   -7    libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp

https://invent.kde.org/plasma/discover/commit/2bed299745d7c56c53191e46a8affe89f19c0491
Comment 5 Aleix Pol 2023-04-14 23:24:40 UTC
Git commit 542f88c90fddd1974b0178a73decd5411ea52148 by Aleix Pol Gonzalez, on behalf of Aleix Pol.
Committed on 14/04/2023 at 23:24.
Pushed by apol into branch 'master'.

flatpak: Do not crash if for any reason we lack a ref's source


(cherry picked from commit 2bed299745d7c56c53191e46a8affe89f19c0491)

M  +19   -7    libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp

https://invent.kde.org/plasma/discover/commit/542f88c90fddd1974b0178a73decd5411ea52148