Bug 425499 - Crash in serviceOffersOffset
Summary: Crash in serviceOffersOffset
Status: RESOLVED FIXED
Alias: None
Product: frameworks-kservice
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: unspecified
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: David Faure
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-08-18 12:16 UTC by Kai Uwe Broulik
Modified: 2020-08-19 10:26 UTC (History)
2 users (show)

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


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kai Uwe Broulik 2020-08-18 12:16:28 UTC
SUMMARY
After recent updates plasmashell crashes on startup in KServiceType::serviceOffersOffset

STEPS TO REPRODUCE
1. Start plasmashell

OBSERVED RESULT
Crash

EXPECTED RESULT
No crash

Backtrace:
Thread 1 "plasmashell" received signal SIGSEGV, Segmentation fault.
KServiceType::serviceOffersOffset (this=0x0) at ./src/services/kservicetype.cpp:216
216     ./src/services/kservicetype.cpp: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0  KServiceType::serviceOffersOffset (this=0x0)
    at ./src/services/kservicetype.cpp:216
#1  0x00007ffff6eff127 in KServiceFactory::hasOffer (this=this@entry=0x55555631d9c0, 
    serviceType=..., testedService=...) at ./src/services/kservicefactory.cpp:319
#2  0x00007ffff6eed714 in <lambda(const Ptr&)>::operator() (
    __closure=<synthetischer Zeiger>, __closure=<synthetischer Zeiger>, serv=...)
    at ./src/services/kapplicationtrader.cpp:57
#3  __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> >::operator()<QList<QExplicitlySharedDataPointer<KService> >::iterator> (
    __it=..., this=<synthetischer Zeiger>)
    at /usr/include/c++/9/bits/predefined_ops.h:283
#4  std::__find_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > > (
    __first=..., __pred=..., __last=...) at /usr/include/c++/9/bits/stl_algo.h:120
#5  std::__find_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > > (
    __first=..., __last=..., __pred=...) at /usr/include/c++/9/bits/stl_algo.h:162
#6  std::__remove_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > >
    (__pred=..., __last=..., __first=...) at /usr/include/c++/9/bits/stl_algo.h:863
#7  std::remove_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > (__first=..., __last=..., 
    __pred=...) at /usr/include/c++/9/bits/stl_algo.h:940
#8  filterMimeTypeOffers (list=...) at ./src/services/kapplicationtrader.cpp:59
#9  KApplicationTrader::queryByMimeType(QString const&, std::function<bool (QExplicitlySharedDataPointer<KService> const&)>) (mimeType=..., filterFunc=...)
    at ./src/services/kapplicationtrader.cpp:99
#10 0x00007ffff7b9c8fd in ?? () from /usr/lib/x86_64-linux-gnu/libKF5Plasma.so.5
#11 0x00007ffff7b840f4 in Plasma::Applet::setAssociatedApplicationUrls(QList<QUrl> const&) () from /usr/lib/x86_64-linux-gnu/libKF5Plasma.so.5
Comment 1 Nicolas Fella 2020-08-18 13:03:14 UTC
Better backtrace:

#0  KServiceType::serviceOffersOffset (this=0x0) at ./src/services/kservicetype.cpp:216
#1  0x00007ffff6eff127 in KServiceFactory::hasOffer (this=this@entry=0x55555631e000, serviceType=..., 
    testedService=...) at ./src/services/kservicefactory.cpp:319
#2  0x00007ffff6eed714 in <lambda(const Ptr&)>::operator() (__closure=<synthetischer Zeiger>, 
    __closure=<synthetischer Zeiger>, serv=...) at ./src/services/kapplicationtrader.cpp:57
#3  __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> >::operator()<QList<QExplicitlySharedDataPointer<KService> >::iterator> (__it=..., this=<synthetischer Zeiger>)
    at /usr/include/c++/9/bits/predefined_ops.h:283
#4  std::__find_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > > (__first=..., __pred=..., __last=...)
    at /usr/include/c++/9/bits/stl_algo.h:120
#5  std::__find_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > > (__first=..., __last=..., __pred=...)
    at /usr/include/c++/9/bits/stl_algo.h:162
#6  std::__remove_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, __gnu_cxx::__ops::_Iter_pred<filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > > (__pred=..., __last=..., __first=...)
    at /usr/include/c++/9/bits/stl_algo.h:863
#7  std::remove_if<QList<QExplicitlySharedDataPointer<KService> >::iterator, filterMimeTypeOffers(KService::List&)::<lambda(const Ptr&)> > (__first=..., __last=..., __pred=...)
   .h:940
#8  filterMimeTypeOffers (list=...) at ./src/services/kapplicationtrader.cpp:59
#9  KApplicationTrader::queryByMimeType(QString const&, std::function<bool (QExplicitlySharedDataPointer<KService> const&)>) (mimeType=..., filterFunc=...) at ./src/services/kapplicationtrader.cpp:99
#10 0x00007ffff7b9c8fd in Plasma::AssociatedApplicationManager::setUrls (
    this=0x7ffff7c1b6b0 <Plasma::(anonymous namespace)::Q_QGS_privateAssociatedApplicationManagerSelf::innerFunction()::holder>, applet=0x5555558bee10, urls=...) at /usr/include/c++/9/bits/std_function.h:396
#11 0x00007ffff7b840f4 in Plasma::Applet::setAssociatedApplicationUrls (this=0x5555558bee10, urls=...)
    at ./src/plasma/applet.cpp:819
#12 0x00007ffff040fa04 in AppletInterface::setAssociatedApplicationUrls (this=0x555555902650, urls=...)
    at ./src/scriptengines/qml/plasmoid/appletinterface.cpp:559
#13 0x00007ffff0411fe1 in AppletInterface::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, 
    _id=<optimized out>, _a=0x7fffffff8930)
    at ./obj-x86_64-linux-gnu/src/scriptengines/qml/plasma_appletscript_declarative_autogen/include/moc_appletinterface.cpp:734
#14 0x00007ffff73c9a01 in QQmlPropertyData::writeProperty (flags=..., value=0x7fffffff88d0, target=
    0x555555902650, this=0x7fffdc1f5b78)
    at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:286
#15 QQmlPropertyPrivate::write (object=object@entry=0x555555902650, property=..., value=..., 
    context=context@entry=0x5555566e2fc0, flags=..., flags@entry=...) at qml/qqmlproperty.cpp:1329
#16 0x00007ffff73cd0e4 in QQmlPropertyPrivate::writeValueProperty (object=0x555555902650, core=..., 
    valueTypeData=..., value=..., context=0x5555566e2fc0, flags=flags@entry=...)
    at qml/qqmlproperty.cpp:1214
#17 0x00007ffff7439734 in QQmlBinding::slowWrite (this=this@entry=0x555556728600, core=..., 
    valueTypeData=..., result=..., isUndefined=isUndefined@entry=false, flags=..., flags@entry=...)
    at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/qml/ftw/qflagpointer_p.h:242
#18 0x00007ffff743a860 in GenericBinding<0>::write (this=0x555556728600, result=..., 
    isUndefined=<optimized out>, flags=...)
    at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/common/qv4staticvalue_p.h:316
#19 0x00007ffff743be93 in QQmlNonbindingBinding::doUpdate (this=0x555556728600, watcher=..., flags=..., 
    scope=...)
    at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/jsruntime/qv4scopedvalue_p.h:239
#20 0x00007ffff7438c52 in QQmlBinding::update (this=0x555556728600, flags=...) at qml/qqmlbinding.cpp:186
#21 0x00007ffff74133dd in QQmlNotifier::emitNotify (endpoint=<optimized out>, a=a@entry=0x0)
    at qml/qqmlnotifier.cpp:104
#22 0x00007ffff73bb294 in QQmlData::signalEmitted (object=0x555556726ac0, index=38, a=0x0)
    at qml/qqmlengine.cpp:858
#23 0x00007ffff5c050a5 in doActivate<false> (sender=0x555556726ac0, signal_index=38, argv=0x0)
    at kernel/qobject_p.h:110
#24 0x00007ffff73b6a68 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) ()
    at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/qml/qqmlpropertycache_p.h:375
#25 0x00007ffff743b475 in QQmlPropertyData::writeProperty (flags=..., value=0x7fffffffa7af, 
    target=<optimized out>, this=<optimized out>)
    at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:290
#26 GenericBinding<1>::doStore<bool> (flags=..., pd=<optimized out>, value=<optimized out>, 
    this=<optimized out>) at qml/qqmlbinding.cpp:334
#27 GenericBinding<1>::write (this=0x555556726940, result=..., isUndefined=<optimized out>, flags=...)
    at qml/qqmlbinding.cpp:297
#28 0x00007ffff743be93 in QQmlNonbindingBinding::doUpdate (this=0x555556726940, watcher=..., flags=..., 
    scope=...)
    at ../../include/QtQml/5.14.2/QtQml/private/../../../../../src/qml/jsruntime/qv4scopedvalue_p.h:239
#29 0x00007ffff7438c52 in QQmlBinding::update (this=0x555556726940, flags=...) at qml/qqmlbinding.cpp:186
#30 0x00007ffff74133dd in QQmlNotifier::emitNotify (endpoint=<optimized out>, a=a@entry=0x0)
    at qml/qqmlnotifier.cpp:104
#31 0x00007ffff73bb294 in QQmlData::signalEmitted (object=0x555556726ac0, index=34, a=0x0)
    at qml/qqmlengine.cpp:858
#32 0x00007ffff5c050a5 in doActivate<false> (sender=0x555556726ac0, signal_index=34, argv=0x0)
    at kernel/qobject_p.h:110
#33 0x00007ffff78f021d in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#34 0x00007ffff73d39d5 in QQmlIncubatorPrivate::changeStatus (s=<optimized out>, this=0x55555672eab0)
    at qml/qqmlincubator.cpp:690
#35 QQmlIncubatorPrivate::incubate (this=0x55555672eab0, i=...) at qml/qqmlincubator.cpp:362
#36 0x00007ffff73d3e33 in QQmlEnginePrivate::incubate (this=0x5555557b39c0, i=..., 
    forContext=<optimized out>) at qml/qqmlincubator.cpp:88
#37 0x00007ffff73d08be in QQmlComponent::create(QQmlIncubator&, QQmlContext*, QQmlContext*) ()
    at qml/qqmlcomponent.cpp:1104
#38 0x00007ffff78eea44 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#39 0x00007ffff78eeadd in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#40 0x00007ffff744a5cc in QQmlObjectCreator::finalize (this=0x5555567018d0, interrupt=...)
    at qml/qqmlobjectcreator.cpp:1410
#41 0x00007ffff73d38ea in QQmlIncubatorPrivate::incubate (this=0x5555559018a0, i=...)
    at qml/qqmlincubator.cpp:342
#42 0x00007ffff73d3e33 in QQmlEnginePrivate::incubate (this=0x5555557b39c0, i=..., 
    forContext=<optimized out>) at qml/qqmlincubator.cpp:88
#43 0x00007ffff73d08be in QQmlComponent::create(QQmlIncubator&, QQmlContext*, QQmlContext*) ()
    at qml/qqmlcomponent.cpp:1104
#44 0x00007ffff7b42d31 in KDeclarative::QmlObject::completeInitialization(QHash<QString, QVariant> const&) () from /usr/lib/x86_64-linux-gnu/libKF5Declarative.so.5
#45 0x00007ffff7f62756 in PlasmaQuick::AppletQuickItem::init (this=this@entry=0x555555902650)
    at ./src/plasmaquick/appletquickitem.cpp:632
#46 0x00007ffff0412799 in AppletInterface::init (this=this@entry=0x555555902650)
    at ./src/scriptengines/qml/plasmoid/appletinterface.cpp:162
#47 0x00007ffff0420165 in ContainmentInterface::init (this=0x555555902650)
    at ./src/scriptengines/qml/plasmoid/containmentinterface.cpp:86
#48 0x00007ffff7f63d41 in PlasmaQuick::AppletQuickItem::itemChange (this=0x555555902650, 
    change=QQuickItem::ItemSceneChange, value=...) at ./src/plasmaquick/appletquickitem.cpp:911
#49 0x00007ffff7834ab5 in QQuickItemPrivate::itemChange(QQuickItem::ItemChange, QQuickItem::ItemChangeData const&) () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#50 0x00007ffff7838dae in QQuickItemPrivate::refWindow(QQuickWindow*) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#51 0x00007ffff783b684 in QQuickItem::setParentItem(QQuickItem*) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#52 0x00007ffff7f6f0d0 in PlasmaQuick::ContainmentViewPrivate::setContainment (this=0x555555af5280, 
    cont=<optimized out>) at ./src/plasmaquick/containmentview.cpp:126
#53 0x00005555555a04f3 in ?? ()
#54 0x00005555555a9b03 in ?? ()
#55 0x00007ffff5c0551e in QtPrivate::QSlotObjectBase::call (a=0x7fffffffd020, r=0x55555570f220, 
    this=0x5555557b2c00) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#56 doActivate<false> (sender=0x55555573abb0, signal_index=4, argv=0x7fffffffd020)
    at kernel/qobject.cpp:3870
#57 0x00007ffff7e1cdc5 in KActivities::Consumer::serviceStatusChanged(KActivities::Consumer::ServiceStatus) () from /usr/lib/x86_64-linux-gnu/libKF5Activities.so.5
#58 0x00007ffff7e1e214 in ?? () from /usr/lib/x86_64-linux-gnu/libKF5Activities.so.5
#59 0x00007ffff5c05550 in doActivate<false> (sender=0x55555575a930, signal_index=11, argv=0x7fffffffd180)
    at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:395
#60 0x00007ffff7e1cd65 in ?? () from /usr/lib/x86_64-linux-gnu/libKF5Activities.so.5
#61 0x00007ffff7e35a26 in ?? () from /usr/lib/x86_64-linux-gnu/libKF5Activities.so.5
#62 0x00007ffff7e35c5d in ?? () from /usr/lib/x86_64-linux-gnu/libKF5Activities.so.5
#63 0x00007ffff7e1d62f in ?? () from /usr/lib/x86_64-linux-gnu/libKF5Activities.so.5
#64 0x00007ffff5c05550 in doActivate<false> (sender=0x555555709a20, signal_index=3, argv=0x7fffffffd420)
    at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:395
#65 0x00007ffff5bffaf7 in QMetaObject::activate (sender=<optimized out>, 
    m=m@entry=0x7ffff6dc75e0 <QDBusPendingCallWatcher::staticMetaObject>, 
    local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffffffd420)
    at kernel/qobject.cpp:3930
#66 0x00007ffff6da87e3 in QDBusPendingCallWatcher::finished (this=<optimized out>, _t1=<optimized out>)
    at .moc/moc_qdbuspendingcall.cpp:158
#67 0x00007ffff6da88e8 in QDBusPendingCallWatcherPrivate::_q_finished (this=<optimized out>)
    at qdbuspendingcall.cpp:494
#68 QDBusPendingCallWatcher::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, 
    _id=<optimized out>, _a=<optimized out>) at .moc/moc_qdbuspendingcall.cpp:86
#69 0x00007ffff5bfd2a9 in QObject::event (this=0x555555709a20, e=0x55555570c130)
    at kernel/qobject.cpp:1339
#70 0x00007ffff673ccc3 in QApplicationPrivate::notify_helper(QObject*, QEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#71 0x00007ffff6745f40 in QApplication::notify(QObject*, QEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#72 0x00007ffff5bcf78a in QCoreApplication::notifyInternal2 (receiver=0x555555709a20, 
    event=0x55555570c130) at ../../include/QtCore/../../src/corelib/kernel/qobject.h:153
#73 0x00007ffff5bd1f74 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, 
    data=0x555555610fc0) at kernel/qcoreapplication.cpp:1815
#74 0x00007ffff5c28b87 in postEventSourceDispatch (s=0x5555556f9e40)
    at kernel/qeventdispatcher_glib.cpp:277
#75 0x00007ffff3fa8fbd in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#76 0x00007ffff3fa9240 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#77 0x00007ffff3fa92e3 in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#78 0x00007ffff5c281e2 in QEventDispatcherGlib::processEvents (this=0x5555556f5a40, flags=...)
    at kernel/qeventdispatcher_glib.cpp:423
#79 0x00007ffff5bce24b in QEventLoop::exec (this=this@entry=0x7fffffffd9f0, flags=..., flags@entry=...)
    at ../../include/QtCore/../../src/corelib/global/qflags.h:136
#80 0x00007ffff5bd6296 in QCoreApplication::exec ()
    at ../../include/QtCore/../../src/corelib/global/qflags.h:118
#81 0x0000555555578cbc in ?? ()
#82 0x00007ffff557a0b3 in __libc_start_main (main=0x555555577ff0, argc=1, argv=0x7fffffffdcc8, 
    init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffdcb8)
    at ../csu/libc-start.c:308
#83 0x0000555555578ede in ?? ()
Comment 2 Nicolas Fella 2020-08-18 13:04:40 UTC
It seems that genericServiceTypePtr in kapplicationtrader.cpp:49 is moot
Comment 3 Kai Uwe Broulik 2020-08-18 14:45:53 UTC
Reverting https://invent.kde.org/frameworks/kservice/-/commit/0eb006796fa35b1a00b72f3170c75d600a14ec22 fixes the crashes
Comment 4 David Faure 2020-08-19 10:09:31 UTC
Does the crash go away if you restart kdeinit5? If you run kbuildsycoca5? If you restart the whole session?

I'll debug this further later today.
Comment 5 David Faure 2020-08-19 10:24:46 UTC
Ah, I think I know what happens. Existing running apps don't get the new kservice code, but notice the desktop file that disappeared. Boom.

Restarting the whole session should work indeed as a workaround.

Until KF6 I'll make kservice keep installing that .desktop file.
Comment 6 David Faure 2020-08-19 10:26:21 UTC
Git commit 2998ec75fe990f875b6993377ee7cff4916ad2a1 by David Faure.
Committed on 19/08/2020 at 10:25.
Pushed by dfaure into branch 'master'.

Install application.desktop again, for compat reasons

NO_CHANGELOG

M  +2    -2    src/CMakeLists.txt

https://invent.kde.org/frameworks/kservice/commit/2998ec75fe990f875b6993377ee7cff4916ad2a1