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

--- Comment #5 from Harald Sitter <sit...@kde.org> ---
Looks alright. The crash looks like a symptom of something else going wrong
though. Specifically we get a dbus error and then crash because of that. Do you
maybe have more relevant output in your journal from xdg-desktop-portal-kde or
kwin?

At a glance I'd say the crash happens because we have a direct call chain into
uninitialized members. That should be an easy fix by guarding d->peer in
RdpConnection and/or doing a queued invocation somewhere. 

#0  0x00007ffff7e8992c in KRdp::RdpConnection::close (this=0x5555555ae780,
reason=KRdp::RdpConnection::CloseReason::None) at
/home/jan/.cache/yay/krdp-git/src/krdp/src/RdpConnection.cpp:219
#1  0x0000555555561cfe in operator() (__closure=0x5555559a5140) at
/home/jan/.cache/yay/krdp-git/src/krdp/server/SessionController.cpp:155
#2  0x000055555556312f in operator() (__closure=0x7fffffffbcc0) at
/usr/include/qt6/QtCore/qobjectdefs_impl.h:141
#3  0x00005555555631fd in QtPrivate::FunctorCallBase::call_internal<void,
QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void,
SessionController::onNewConnection(KRdp::RdpConnection*)::<lambda()>
>::call(SessionController::onNewConnection(KRdp::RdpConnection*)::<lambda()>&,
void**)::<lambda()> >(void **, struct {...} &&) (args=0x7fffffffbdf8, fn=...)
at /usr/include/qt6/QtCore/qobjectdefs_impl.h:65
#4  0x0000555555563174 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>,
QtPrivate::List<>, void,
SessionController::onNewConnection(KRdp::RdpConnection*)::<lambda()>
>::call(struct {...} &, void **) (f=..., arg=0x7fffffffbdf8) at
/usr/include/qt6/QtCore/qobjectdefs_impl.h:140
#5  0x0000555555563009 in
QtPrivate::FunctorCallable<SessionController::onNewConnection(KRdp::RdpConnection*)::<lambda()>
>::call<QtPrivate::List<>, void>(struct {...} &, void *, void **) (f=...,
arg=0x7fffffffbdf8) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:362
#6  0x0000555555562f59 in
QtPrivate::QCallableObject<SessionController::onNewConnection(KRdp::RdpConnection*)::<lambda()>,
QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *,
void **, bool *) (which=1, this_=0x5555559a5130, r=0x7fffffffd640,
a=0x7fffffffbdf8, ret=0x0) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:572
        that = 0x5555559a5130
#7  0x00007ffff5bb1a49 in QtPrivate::QSlotObjectBase::call
(this=0x5555559a5130, r=0x7fffffffd640, a=0x7fffffffbdf8, this=<optimized out>,
r=<optimized out>, a=<optimized out>) at
/usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:486
#8  doActivate<false> (sender=<optimized out>, signal_index=<optimized out>,
argv=<optimized out>) at
/usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4115
        obj = {m_slotObject = std::unique_ptr<QtPrivate::QSlotObjectBase> =
{get() = 0x5555559a5130}}
        receiver = 0x7fffffffd640
        td = <optimized out>
        receiverInSameThread = <optimized out>
        senderData = {previous = 0x7fffffffca90, receiver = 0x7fffffffd640,
sender = 0x7fffd8010680, signal = 3}
        c = 0x55555599ffb0
        connections = {d = <optimized out>}
        list = <optimized out>
        inSenderThread = <optimized out>
        highestConnectionId = <optimized out>
        signalVector = 0x5555559c11c0
        currentThreadId = <optimized out>
        sp = <optimized out>
        signal_spy_set = 0x0
        empty_argv = {0x0}
        senderDeleted = false
#9  0x000055555556247b in SessionWrapper::sessionError (this=0x7fffd8010680) at
/home/jan/.cache/yay/krdp-git/src/krdp/build/server/krdpserver_autogen/include/SessionController.moc:167
#10 0x000055555556869a in QtPrivate::FunctorCall<QtPrivate::IndexesList<>,
QtPrivate::List<>, void, void (SessionWrapper::*)()>::call(void
(SessionWrapper::*)(), SessionWrapper*, void**)::{lambda()#1}::operator()()
const (__closure=0x7fffffffbed0) at
/usr/include/qt6/QtCore/qobjectdefs_impl.h:152
#11 0x0000555555568f52 in QtPrivate::FunctorCallBase::call_internal<void,
QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void
(SessionWrapper::*)()>::call(void (SessionWrapper::*)(), SessionWrapper*,
void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<QtPrivate::IndexesList<>,
QtPrivate::List<>, void, void (SessionWrapper::*)()>::call(void
(SessionWrapper::*)(), SessionWrapper*, void**)::{lambda()#1}&&)
(args=0x7fffffffc008, fn=...) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:65
#12 0x000055555556870c in QtPrivate::FunctorCall<QtPrivate::IndexesList<>,
QtPrivate::List<>, void, void (SessionWrapper::*)()>::call(void
(SessionWrapper::*)(), SessionWrapper*, void**) (f=(void
(SessionWrapper::*)(SessionWrapper * const)) 0x555555562452
<SessionWrapper::sessionError()>, o=0x7fffd8010680, arg=0x7fffffffc008) at
/usr/include/qt6/QtCore/qobjectdefs_impl.h:151
#13 0x0000555555567d98 in QtPrivate::FunctionPointer<void
(SessionWrapper::*)()>::call<QtPrivate::List<>, void>(void
(SessionWrapper::*)(), SessionWrapper*, void**) (f=(void
(SessionWrapper::*)(SessionWrapper * const)) 0x555555562452
<SessionWrapper::sessionError()>, o=0x7fffd8010680, arg=0x7fffffffc008) at
/usr/include/qt6/QtCore/qobjectdefs_impl.h:199
#14 0x0000555555567199 in QtPrivate::QCallableObject<void
(SessionWrapper::*)(), QtPrivate::List<>, void>::impl(int,
QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1,
this_=0x5555559a3800, r=0x7fffd8010680, a=0x7fffffffc008, ret=0x0) at
/usr/include/qt6/QtCore/qobjectdefs_impl.h:570
        that = 0x5555559a3800
#15 0x00007ffff5bb1a49 in QtPrivate::QSlotObjectBase::call
(this=0x5555559a3800, r=0x7fffd8010680, a=0x7fffffffc008, this=<optimized out>,
r=<optimized out>, a=<optimized out>) at
/usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:486
#16 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>,
argv=<optimized out>) at
/usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4115
        obj = {m_slotObject = std::unique_ptr<QtPrivate::QSlotObjectBase> =
{get() = 0x5555559a3800}}
        receiver = 0x7fffd8010680
        td = <optimized out>
        receiverInSameThread = <optimized out>
        senderData = {previous = 0x0, receiver = 0x7fffd8010680, sender =
0x5555559bc140, signal = 4}
        c = 0x55555599c830
        connections = {d = <optimized out>}
        list = <optimized out>
        inSenderThread = <optimized out>
        highestConnectionId = <optimized out>
        signalVector = 0x7fffd8001c10
        currentThreadId = <optimized out>
        sp = <optimized out>
        signal_spy_set = 0x0
        empty_argv = {0x0}
        senderDeleted = false
#17 0x00007ffff7e71f71 in KRdp::AbstractSession::error (this=0x5555559bc140) at
/home/jan/.cache/yay/krdp-git/src/krdp/build/src/KRdp_autogen/EWIEGA46WW/moc_AbstractSession.cpp:191
#18 0x00007ffff7ea1a68 in KRdp::PortalSession::onCreateSession
(this=0x5555559bc140, code=4294967295, result=...) at
/home/jan/.cache/yay/krdp-git/src/krdp/src/PortalSession.cpp:186
        PermissionsPersistUntilExplicitlyRevoked = 2
        parameters = {d = {d = 0x12a}}
        restorationGroup = {<KConfigBase> = {_vptr.KConfigBase =
0x7fffffffc170}, d = {d = 0x7fffffffc1b0}}
        restoreToken = {d = {d = 0x7fffffffc170, ptr = 0x7fffffffc1b0 u"抠翿",
size = 140737488339368}, static _empty = 0 u'\000'}
#19 0x00007ffff7eb39b5 in std::__invoke_impl<void, void
(KRdp::PortalSession::*&)(unsigned int, QMap<QString, QVariant> const&),
KRdp::PortalSession*&, unsigned int, QMap<QString, QVariant> const&>
(__f=@0x55555599d050: (void (KRdp::PortalSession::*)(KRdp::PortalSession *
const, unsigned int, const QMap<QString, QVariant> &)) 0x7ffff7ea194a
<KRdp::PortalSession::onCreateSession(unsigned int, QMap<QString, QVariant>
const&)>, __t=@0x55555599d060: 0x5555559bc140) at
/usr/include/c++/14.2.1/bits/invoke.h:74
#20 0x00007ffff7eb2b5b in std::__invoke<void (KRdp::PortalSession::*&)(unsigned
int, QMap<QString, QVariant> const&), KRdp::PortalSession*&, unsigned int,
QMap<QString, QVariant> const&> (__fn=@0x55555599d050: (void
(KRdp::PortalSession::*)(KRdp::PortalSession * const, unsigned int, const
QMap<QString, QVariant> &)) 0x7ffff7ea194a
<KRdp::PortalSession::onCreateSession(unsigned int, QMap<QString, QVariant>
const&)>) at /usr/include/c++/14.2.1/bits/invoke.h:96
#21 0x00007ffff7eb20c5 in std::_Bind<void
(KRdp::PortalSession::*(KRdp::PortalSession*, std::_Placeholder<1>,
std::_Placeholder<2>))(unsigned int, QMap<QString, QVariant>
const&)>::__call<void, unsigned int&&, QMap<QString, QVariant> const&, 0ul,
1ul, 2ul>(std::tuple<unsigned int&&, QMap<QString, QVariant> const&>&&,
std::_Index_tuple<0ul, 1ul, 2ul>) (this=0x55555599d050, __args=...) at
/usr/include/c++/14.2.1/functional:513
#22 0x00007ffff7eb1407 in std::_Bind<void
(KRdp::PortalSession::*(KRdp::PortalSession*, std::_Placeholder<1>,
std::_Placeholder<2>))(unsigned int, QMap<QString, QVariant>
const&)>::operator()<unsigned int, QMap<QString, QVariant> const&,
void>(unsigned int&&, QMap<QString, QVariant> const&) (this=0x55555599d050) at
/usr/include/c++/14.2.1/functional:598
#23 0x00007ffff7eb0303 in std::__invoke_impl<void, std::_Bind<void
(KRdp::PortalSession::*(KRdp::PortalSession*, std::_Placeholder<1>,
std::_Placeholder<2>))(unsigned int, QMap<QString, QVariant> const&)>&,
unsigned int, QMap<QString, QVariant> const&>(std::__invoke_other,
std::_Bind<void (KRdp::PortalSession::*(KRdp::PortalSession*,
std::_Placeholder<1>, std::_Placeholder<2>))(unsigned int, QMap<QString,
QVariant> const&)>&, unsigned int&&, QMap<QString, QVariant> const&) (__f=...)
at /usr/include/c++/14.2.1/bits/invoke.h:61
#24 0x00007ffff7eaf06f in std::__invoke_r<void, std::_Bind<void
(KRdp::PortalSession::*(KRdp::PortalSession*, std::_Placeholder<1>,
std::_Placeholder<2>))(unsigned int, QMap<QString, QVariant> const&)>&,
unsigned int, QMap<QString, QVariant> const&>(std::_Bind<void
(KRdp::PortalSession::*(KRdp::PortalSession*, std::_Placeholder<1>,
std::_Placeholder<2>))(unsigned int, QMap<QString, QVariant> const&)>&,
unsigned int&&, QMap<QString, QVariant> const&) (__fn=...) at
/usr/include/c++/14.2.1/bits/invoke.h:111
#25 0x00007ffff7ead3b2 in std::_Function_handler<void (unsigned int,
QMap<QString, QVariant> const&), std::_Bind<void
(KRdp::PortalSession::*(KRdp::PortalSession*, std::_Placeholder<1>,
std::_Placeholder<2>))(unsigned int, QMap<QString, QVariant> const&)>
>::_M_invoke(std::_Any_data const&, unsigned int&&, QMap<QString, QVariant>
const&) (__functor=..., __args#0=@0x7fffffffc514: 4294967295, __args#1=...) at
/usr/include/c++/14.2.1/bits/std_function.h:290
#26 0x00007ffff7ea7d36 in std::function<void(unsigned int, QMap<QString,
QVariant> const&)>::operator() (this=0x555555975160, __args#0=4294967295,
__args#1=...) at /usr/include/c++/14.2.1/bits/std_function.h:591
#27 0x00007ffff7ea065a in KRdp::PortalRequest::onStarted (this=0x555555975140,
watcher=0x55555599d000) at
/home/jan/.cache/yay/krdp-git/src/krdp/src/PortalSession.cpp:57
        reply = {<QDBusPendingReplyBase> = {<QDBusPendingCall> = {d = {d =
0x5555558b1440}}, <No data fields>}, <No data fields>}

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

Reply via email to