https://bugs.kde.org/show_bug.cgi?id=481993

--- Comment #13 from Harald Sitter <sit...@kde.org> ---
I believe there is a race condition between flatpak and packagekit init where
they can end up deadlocking each other inside plugin loading code. Or more
specifically the flatpak backend tries to g_module load libsoup while appstream
inside the packagekit backend tries to lazy g_module load GIO plugins.


The packagekit thread loading appstream loading gio plugins trying to get a
lock

  thread #14, name = 'Thread (pooled)', stop reason = signal SIGSTOP
    frame #0: 0x00007ff929e912c0 libc.so.6`__GI___lll_lock_wait at
futex-internal.h:146:13
    frame #1: 0x00007ff929e912aa
libc.so.6`__GI___lll_lock_wait(futex=0x00007ff92d5aea48, private=0) at
lowlevellock.c:49:7
    frame #2: 0x00007ff929e9805d libc.so.6`___pthread_mutex_lock at
pthread_mutex_lock.c:48:5
    frame #3: 0x00007ff929e98046
libc.so.6`___pthread_mutex_lock(mutex=0x00007ff92d5aea48) at
pthread_mutex_lock.c:128:7
    frame #4: 0x00007ff92d5822ef
ld-linux-x86-64.so.2`_dl_open(file="/usr/lib/x86_64-linux-gnu/gio/modules/libgvfsdbus.so",
mode=-2147483647, caller_dlopen=0x00007ff928a41b2c, nsid=-2, argc=3,
argv=<unavailable>, env=0x00007ffebcebfcd8) at dl-open.c:830:3
    frame #5: 0x00007ff929e9063c libc.so.6`dlopen_doit(a=0x00007ff8f97f9200) at
dlopen.c:56:15
    frame #6: 0x00007ff929f74a98
libc.so.6`__GI__dl_catch_exception(exception=0x00007ff8f97f9160,
operate=<unavailable>, args=<unavailable>) at dl-error-skeleton.c:208:8
    frame #7: 0x00007ff929f74b63
libc.so.6`__GI__dl_catch_error(objname=0x00007ff8f97f91b8,
errstring=0x00007ff8f97f91c0, mallocedp=0x00007ff8f97f91b7,
operate=<unavailable>, args=<unavailable>) at dl-error-skeleton.c:227:19
    frame #8: 0x00007ff929e9012e libc.so.6`_dlerror_run(operate=<unavailable>,
args=<unavailable>) at dlerror.c:138:17
    frame #9: 0x00007ff929e906c8 libc.so.6`___dlopen [inlined]
dlopen_implementation(dl_caller=<unavailable>, mode=<unavailable>,
file=<unavailable>) at dlopen.c:71:10
    frame #10: 0x00007ff929e906a7 libc.so.6`___dlopen(file=<unavailable>,
mode=<unavailable>) at dlopen.c:81:12
    frame #11: 0x00007ff928a41b2c libgmodule-2.0.so.0`g_module_open_full + 444
    frame #12: 0x00007ff928e2e6db libgio-2.0.so.0`___lldb_unnamed_symbol4621 +
91
    frame #13: 0x00007ff928fc926b libgobject-2.0.so.0`g_type_module_use + 107
    frame #14: 0x00007ff928ef64b6 libgio-2.0.so.0`___lldb_unnamed_symbol6867 +
86
    frame #15: 0x00007ff928e2eff6
libgio-2.0.so.0`g_io_extension_point_get_extensions + 22
    frame #16: 0x00007ff928e34f0a libgio-2.0.so.0`___lldb_unnamed_symbol4657 +
554
    frame #17: 0x00007ff928e755dd libgio-2.0.so.0`g_vfs_get_default + 93
    frame #18: 0x00007ff928e1b9f2 libgio-2.0.so.0`g_file_new_for_path + 18
    frame #19: 0x00007ff9290506f3
libappstream.so.5`as_cache_remove_old_data_from_dir.isra.0(cache_dir="/home/me/.cache/appstream",
cache=<unavailable>) at as-cache.c:370:9
    frame #20: 0x00007ff92901cba4 libappstream.so.5`as_cache_prune_data at
as-cache.c:457:2
    frame #21: 0x00007ff929051bc3
libappstream.so.5`as_pool_load_internal.constprop.0(pool=0x000055dc9f01d200,
include_user_data=1, force_cache_refresh=0, caches_updated=0x0000000000000000,
error=0x00007ff8f97f9548, cancellable=<unavailable>) at as-pool.c:1629:2
    frame #22: 0x00007ff92a5d18de libAppStreamQt.so.3`AppStream::Pool::load() +
62
    frame #23: 0x00007ff8f8306645
packagekit-backend.so`loadAppStream(appdata=0x000055dc9f028cc0) at
PackageKitBackend.cpp:300:29
    frame #24: 0x00007ff8f8318170 packagekit-backend.so`bool
std::__invoke_impl<bool, bool (*&)(AppStream::Pool*),
AppStream::Pool*&>((null)=__invoke_other @ 0x00007ff8f97f9628,
__f=0x00007ff8f97f96a0, __args=0x00007ff8f97f9698) at invoke.h:61:14
    frame #25: 0x00007ff8f831813d
packagekit-backend.so`std::__invoke_result<bool (*&)(AppStream::Pool*),
AppStream::Pool*&>::type std::__invoke<bool (*&)(AppStream::Pool*),
AppStream::Pool*&>(__fn=0x00007ff8f97f96a0, __args=0x00007ff8f97f9698) at
invoke.h:96:14
    frame #26: 0x00007ff8f831810d packagekit-backend.so`std::invoke_result<bool
(*&)(AppStream::Pool*), AppStream::Pool*&>::type std::invoke<bool
(*&)(AppStream::Pool*), AppStream::Pool*&>(__fn=0x00007ff8f97f96a0,
__args=0x00007ff8f97f9698) at functional:110:14
    frame #27: 0x00007ff8f83180e1
packagekit-backend.so`QtConcurrent::StoredFunctionCall<bool
(*)(AppStream::Pool*), AppStream::Pool*>::runFunctor(this=0x00007ff8f97f97a0,
function=(packagekit-backend.so`loadAppStream(AppStream::Pool*) at
PackageKitBackend.cpp:299), args=0x000055dc9f028cc0)::'lambda'(bool
(*)(AppStream::Pool*), AppStream::Pool*)::operator()(bool
(*)(AppStream::Pool*), AppStream::Pool*) const at
qtconcurrentstoredfunctioncall.h:116:20
    frame #28: 0x00007ff8f83180ab packagekit-backend.so`bool
std::__invoke_impl<bool, QtConcurrent::StoredFunctionCall<bool
(*)(AppStream::Pool*), AppStream::Pool*>::runFunctor()::'lambda'(bool
(*)(AppStream::Pool*), AppStream::Pool*) const&, bool (*)(AppStream::Pool*),
AppStream::Pool*>((null)=__invoke_other @ 0x00007ff8f97f96d8,
__f=0x00007ff8f97f97a0, __args=0x000055dc9f01aa88, __args=0x000055dc9f01aa80)
at invoke.h:61:14
    frame #29: 0x00007ff8f8318035
packagekit-backend.so`std::__invoke_result<QtConcurrent::StoredFunctionCall<bool
(*)(AppStream::Pool*), AppStream::Pool*>::runFunctor()::'lambda'(bool
(*)(AppStream::Pool*), AppStream::Pool*) const&, bool (*)(AppStream::Pool*),
AppStream::Pool*>::type std::__invoke<QtConcurrent::StoredFunctionCall<bool
(*)(AppStream::Pool*), AppStream::Pool*>::runFunctor()::'lambda'(bool
(*)(AppStream::Pool*), AppStream::Pool*) const&, bool (*)(AppStream::Pool*),
AppStream::Pool*>(__fn=0x00007ff8f97f97a0, __args=0x000055dc9f01aa88,
__args=0x000055dc9f01aa80) at invoke.h:96:14
    frame #30: 0x00007ff8f8317ffe packagekit-backend.so`decltype(auto)
std::__apply_impl<QtConcurrent::StoredFunctionCall<bool (*)(AppStream::Pool*),
AppStream::Pool*>::runFunctor()::'lambda'(bool (*)(AppStream::Pool*),
AppStream::Pool*) const&, std::tuple<bool (*)(AppStream::Pool*),
AppStream::Pool*>, 0ul, 1ul>(__f=0x00007ff8f97f97a0, __t=0x000055dc9f01aa80,
(null)=std::index_sequence<0UL, 1UL> @ 0x00007ff8f97f9748) at tuple:1852:14
    frame #31: 0x00007ff8f8317f7d packagekit-backend.so`decltype(auto)
std::apply<QtConcurrent::StoredFunctionCall<bool (*)(AppStream::Pool*),
AppStream::Pool*>::runFunctor()::'lambda'(bool (*)(AppStream::Pool*),
AppStream::Pool*) const&, std::tuple<bool (*)(AppStream::Pool*),
AppStream::Pool*>>(__f=0x00007ff8f97f97a0, __t=0x000055dc9f01aa80) at
tuple:1863:14
    frame #32: 0x00007ff8f831718a
packagekit-backend.so`QtConcurrent::StoredFunctionCall<bool
(*)(AppStream::Pool*), AppStream::Pool*>::runFunctor(this=0x000055dc9f01aa60)
at qtconcurrentstoredfunctioncall.h:122:27
    frame #33: 0x00007ff8f83170f6
packagekit-backend.so`QtConcurrent::RunFunctionTaskBase<bool>::run(this=0x000055dc9f01aa60)
at qtconcurrentrunbase.h:83:13
    frame #34: 0x00007ff92a966d7d libQt6Core.so.6`___lldb_unnamed_symbol10932 +
541
    frame #35: 0x00007ff92a96036d libQt6Core.so.6`___lldb_unnamed_symbol10875 +
333
    frame #36: 0x00007ff929e94ac3 libc.so.6`start_thread(arg=<unavailable>) at
pthread_create.c:442:8
    frame #37: 0x00007ff929f26850 libc.so.6`__clone3 at clone3.S:81




the gui thread loading flatpak also trying to get a lock. (while presumably
holding a dl level lock?)


* thread #1, name = 'plasma-discover', stop reason = signal SIGSTOP
  * frame #0: 0x00007ff929e912c0 libc.so.6`__GI___lll_lock_wait at
futex-internal.h:146:13
    frame #1: 0x00007ff929e912aa
libc.so.6`__GI___lll_lock_wait(futex=0x00007ff8d00068a0, private=0) at
lowlevellock.c:49:7
    frame #2: 0x00007ff929e9805d libc.so.6`___pthread_mutex_lock at
pthread_mutex_lock.c:48:5
    frame #3: 0x00007ff929e98046
libc.so.6`___pthread_mutex_lock(mutex=0x00007ff8d00068a0) at
pthread_mutex_lock.c:128:7
    frame #4: 0x00007ff928a41a07 libgmodule-2.0.so.0`g_module_open_full + 151
    frame #5: 0x00007ff8d465f3a5 libsoup-2.4.so.1`___lldb_unnamed_symbol1978 +
53
    frame #6: 0x00007ff92d57a47e
ld-linux-x86-64.so.2`call_init(l=<unavailable>, argc=3,
argv=0x00007ffebcebfcb8, env=0x00007ffebcebfcd8) at dl-init.c:70:3
    frame #7: 0x00007ff92d57a568 ld-linux-x86-64.so.2`_dl_init [inlined]
call_init(env=0x00007ffebcebfcd8, argv=0x00007ffebcebfcb8, argc=3,
l=<unavailable>) at dl-init.c:33:6
    frame #8: 0x00007ff92d57a53b
ld-linux-x86-64.so.2`_dl_init(main_map=0x000055dc9f02c130, argc=3,
argv=0x00007ffebcebfcb8, env=0x00007ffebcebfcd8) at dl-init.c:117:5
    frame #9: 0x00007ff929f74af5
libc.so.6`__GI__dl_catch_exception(exception=<unavailable>,
operate=<unavailable>, args=<unavailable>) at dl-error-skeleton.c:182:7
    frame #10: 0x00007ff92d581ff6 ld-linux-x86-64.so.2`dl_open_worker at
dl-open.c:808:5
    frame #11: 0x00007ff92d581fc8
ld-linux-x86-64.so.2`dl_open_worker(a=0x00007ffebcebdc10) at dl-open.c:771:1
    frame #12: 0x00007ff929f74a98
libc.so.6`__GI__dl_catch_exception(exception=0x00007ffebcebdbf0,
operate=0x000000000000df60, args=0x00007ffebcebdc10) at
dl-error-skeleton.c:208:8
    frame #13: 0x00007ff92d58234e
ld-linux-x86-64.so.2`_dl_open(file=<unavailable>, mode=-2147479551,
caller_dlopen=0x00007ff92a909cb0, nsid=-2, argc=3, argv=<unavailable>,
env=0x00007ffebcebfcd8) at dl-open.c:883:17
    frame #14: 0x00007ff929e9063c libc.so.6`dlopen_doit(a=0x00007ffebcebde80)
at dlopen.c:56:15
    frame #15: 0x00007ff929f74a98
libc.so.6`__GI__dl_catch_exception(exception=0x00007ffebcebdde0,
operate=<unavailable>, args=<unavailable>) at dl-error-skeleton.c:208:8
    frame #16: 0x00007ff929f74b63
libc.so.6`__GI__dl_catch_error(objname=0x00007ffebcebde38,
errstring=0x00007ffebcebde40, mallocedp=0x00007ffebcebde37,
operate=<unavailable>, args=<unavailable>) at dl-error-skeleton.c:227:19
    frame #17: 0x00007ff929e9012e libc.so.6`_dlerror_run(operate=<unavailable>,
args=<unavailable>) at dlerror.c:138:17
    frame #18: 0x00007ff929e906c8 libc.so.6`___dlopen [inlined]
dlopen_implementation(dl_caller=<unavailable>, mode=<unavailable>,
file=<unavailable>) at dlopen.c:71:10
    frame #19: 0x00007ff929e906a7 libc.so.6`___dlopen(file=<unavailable>,
mode=<unavailable>) at dlopen.c:81:12
    frame #20: 0x00007ff92a909cb0 libQt6Core.so.6`___lldb_unnamed_symbol9792 +
1248
    frame #21: 0x00007ff92a90b0c6 libQt6Core.so.6`___lldb_unnamed_symbol9793 +
54
    frame #22: 0x00007ff92a9ef985 libQt6Core.so.6`QPluginLoader::load() + 117
    frame #23: 0x00007ff92a9ef9f9 libQt6Core.so.6`QPluginLoader::instance() +
25
    frame #24: 0x00007ff92d3a687f
libDiscoverCommon.so`DiscoverBackendsFactory::backendForFile(this=0x00007ffebcebe530,
libname=0x000055dc9efc2828, name=0x000055dc9efc2828) const at
DiscoverBackendsFactory.cpp:53:98
    frame #25: 0x00007ff92d3a67c2
libDiscoverCommon.so`DiscoverBackendsFactory::backend(this=0x00007ffebcebe530,
name=0x000055dc9efc2828) const at DiscoverBackendsFactory.cpp:44:16
    frame #26: 0x00007ff92d3a7c2b
libDiscoverCommon.so`DiscoverBackendsFactory::allBackends()
const::$_0::operator()(this=0x00007ffebcebe3f0, name=0x000055dc9efc2828) const
at DiscoverBackendsFactory.cpp:96:16
    frame #27: 0x00007ff92d3a728f
libDiscoverCommon.so`QList<AbstractResourcesBackend*>
kTransform<QList<AbstractResourcesBackend*>, QList<QString>,
DiscoverBackendsFactory::allBackends() const::$_0>(input=0x00007ffebcebe478,
op=(this = 0x00007ffebcebe530)) at utils.h:53:16
    frame #28: 0x00007ff92d3a710c
libDiscoverCommon.so`DiscoverBackendsFactory::allBackends(this=0x00007ffebcebe530)
const at DiscoverBackendsFactory.cpp:95:16
    frame #29: 0x00007ff92d361660
libDiscoverCommon.so`ResourcesModel::registerAllBackends(this=0x000055dc9f1672b0)
at ResourcesModel.cpp:241:29
    frame #30: 0x00007ff92d360b81
libDiscoverCommon.so`ResourcesModel::init(this=0x000055dc9f1672b0, load=true)
at ResourcesModel.cpp:98:9
    frame #31: 0x00007ff92d360a75 libDiscoverCommon.so`ResourcesModel::global()
at ResourcesModel.cpp:39:17
    frame #32: 0x00007ff92d33b6ea
libDiscoverCommon.so`CategoryModel::CategoryModel(this=0x000055dc9f0176e0,
parent=0x0000000000000000) at CategoryModel.cpp:22:13
    frame #33: 0x00007ff92d33bac0 libDiscoverCommon.so`CategoryModel::global()
at CategoryModel.cpp:39:24
    frame #34: 0x000055dc9cb77a3c
plasma-discover`DiscoverDeclarativePlugin::registerTypes(this=0x000055dc9f010890,
(null)="org.kde.discover") at DiscoverDeclarativePlugin.cpp:63:77
    frame #35: 0x000055dc9cb4b824
plasma-discover`DiscoverObject::DiscoverObject(this=0x000055dc9ebbde30,
initialProperties=0x00007ffebcebf328) at DiscoverObject.cpp:145:13
    frame #36: 0x000055dc9cb44bfd plasma-discover`main(argc=3,
argv=0x00007ffebcebfcb8) at main.cpp:173:34
    frame #37: 0x00007ff929e29d90
libc.so.6`__libc_start_call_main(main=(plasma-discover`main at main.cpp:96),
argc=3, argv=0x00007ffebcebfcb8) at libc_start_call_main.h:58:16
    frame #38: 0x00007ff929e29e40
libc.so.6`__libc_start_main_impl(main=(plasma-discover`main at main.cpp:96),
argc=3, argv=0x00007ffebcebfcb8, init=<unavailable>, fini=<unavailable>,
rtld_fini=<unavailable>, stack_end=0x00007ffebcebfca8) at libc-start.c:392:3
    frame #39: 0x000055dc9cb32bd5 plasma-discover`_start + 37

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to