Bug 417936 - Crash when dragging from a window
Summary: Crash when dragging from a window
Status: RESOLVED FIXED
Alias: None
Product: kwin
Classification: Plasma
Component: wayland-generic (show other bugs)
Version: unspecified
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-02-20 15:20 UTC by Aleix Pol
Modified: 2020-05-07 13:16 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Aleix Pol 2020-02-20 15:20:53 UTC
SUMMARY
As soon as my drag exits the window, kwin_wayland crashes for me:

#0  0x00007fb6b94e5ce5 in raise () at /usr/lib/libc.so.6
#1  0x00007fb6b94cf92c in abort () at /usr/lib/libc.so.6
#2  0x00007fb6b9ba3be3 in qt_message_fatal (context=..., message=<synthetic pointer>...) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:1914
#3  QMessageLogger::fatal(char const*, ...) const (this=this@entry=0x7ffec3dfae60, msg=msg@entry=0x7fb6b9e98ea0 "ASSERT: \"%s\" in file %s, line %d") at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:893
#4  0x00007fb6b9ba2fc5 in qt_assert(char const*, char const*, int) (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.h:90
#5  0x000055da99bdc807 in KWin::Xwl::XToWlDrag::XToWlDrag(KWin::Xwl::X11Source*)::$_0::operator()(unsigned int) const (this=0x55da9c0b9bb0, eventTime=6861148) at /home/apol/devel/frameworks/kwin/xwl/drag_x.cpp:78
#6  0x000055da99bdc6f0 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<unsigned int>, void, KWin::Xwl::XToWlDrag::XToWlDrag(KWin::Xwl::X11Source*)::$_0>::call(KWin::Xwl::XToWlDrag::XToWlDrag(KWin::Xwl::X11Source*)::$_0&, void**)
    (f=..., arg=0x7ffec3dfb0b0) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:146
#7  0x000055da99bdc6b1 in QtPrivate::Functor<KWin::Xwl::XToWlDrag::XToWlDrag(KWin::Xwl::X11Source*)::$_0, 1>::call<QtPrivate::List<unsigned int>, void>(KWin::Xwl::XToWlDrag::XToWlDrag(KWin::Xwl::X11Source*)::$_0&, void*, void**) (f=..., arg=0x7ffec3dfb0b0)
    at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:256
#8  0x000055da99bdc65c in QtPrivate::QFunctorSlotObject<KWin::Xwl::XToWlDrag::XToWlDrag(KWin::Xwl::X11Source*)::$_0, 1, QtPrivate::List<unsigned int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x55da9c0b9ba0, r=0x55da9c01f160, a=0x7ffec3dfb0b0, ret=0x0) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:439
#9  0x00007fb6b9deb65e in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffec3dfb0b0, r=0x55da9c01f160, this=0x55da9c0b9ba0) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:394
#10 doActivate<false>(QObject*, int, void**) (sender=0x55da9b5350e0, signal_index=3, argv=0x7ffec3dfb0b0) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3858
#11 0x000055da99bbe472 in KWin::Xwl::Selection::transferFinished(unsigned int) (this=0x55da9b5350e0, _t1=6861148) at kwin_wayland_autogen/DC6ZQWILS5/moc_selection.cpp:134
#12 0x000055da99be6262 in KWin::Xwl::Selection::startTransferToWayland(unsigned int, int)::$_0::operator()() const (this=0x55da9c02f3d0) at /home/apol/devel/frameworks/kwin/xwl/selection.cpp:303
#13 0x000055da99be61f6 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, KWin::Xwl::Selection::startTransferToWayland(unsigned int, int)::$_0>::call(KWin::Xwl::Selection::startTransferToWayland(unsigned int, int)::$_0&, void**)
    (f=..., arg=0x7ffec3dfb260) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:146
#14 0x000055da99be61c1 in QtPrivate::Functor<KWin::Xwl::Selection::startTransferToWayland(unsigned int, int)::$_0, 0>::call<QtPrivate::List<>, void>(KWin::Xwl::Selection::startTransferToWayland(unsigned int, int)::$_0&, void*, void**) (f=..., arg=0x7ffec3dfb260)
    at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:256
#15 0x000055da99be616c in QtPrivate::QFunctorSlotObject<KWin::Xwl::Selection::startTransferToWayland(unsigned int, int)::$_0, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x55da9c02f3c0, r=0x55da9b5350e0, a=0x7ffec3dfb260, ret=0x0) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:439
#16 0x00007fb6b9deb65e in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffec3dfb260, r=0x55da9b5350e0, this=0x55da9c02f3c0) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:394
#17 doActivate<false>(QObject*, int, void**) (sender=0x55da9bf2f150, signal_index=3, argv=0x7ffec3dfb260) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3858
#18 0x000055da99bbeed5 in KWin::Xwl::Transfer::finished() (this=0x55da9bf2f150) at kwin_wayland_autogen/DC6ZQWILS5/moc_transfer.cpp:131
#19 0x000055da99beddee in KWin::Xwl::Transfer::endTransfer() (this=0x55da9bf2f150) at /home/apol/devel/frameworks/kwin/xwl/transfer.cpp:87
#20 0x000055da99bef554 in KWin::Xwl::TransferXtoWl::dataSourceWrite() (this=0x55da9bf2f150) at /home/apol/devel/frameworks/kwin/xwl/transfer.cpp:577
#21 0x000055da99bef2ac in KWin::Xwl::TransferXtoWl::startTransfer() (this=0x55da9bf2f150) at /home/apol/devel/frameworks/kwin/xwl/transfer.cpp:392
#22 0x000055da99bef0ae in KWin::Xwl::TransferXtoWl::handleSelectionNotify(xcb_selection_notify_event_t*) (this=0x55da9bf2f150, event=0x55da9bfcf460) at /home/apol/devel/frameworks/kwin/xwl/transfer.cpp:362
#23 0x000055da99be5158 in KWin::Xwl::Selection::handleSelectionNotify(xcb_selection_notify_event_t*) (this=0x55da9b5350e0, event=0x55da9bfcf460) at /home/apol/devel/frameworks/kwin/xwl/selection.cpp:274
#24 0x000055da99be5008 in KWin::Xwl::Selection::filterEvent(xcb_generic_event_t*) (this=0x55da9b5350e0, event=0x55da9bfcf460) at /home/apol/devel/frameworks/kwin/xwl/selection.cpp:130
#25 0x000055da99bd1cf2 in KWin::Xwl::DataBridge::filterEvent(xcb_generic_event_t*) (this=0x55da9b15f3a0, event=0x55da9bfcf460) at /home/apol/devel/frameworks/kwin/xwl/databridge.cpp:100
#26 0x000055da99bf3aa5 in KWin::Xwl::Xwayland::continueStartupWithX()::$_7::operator()() const (this=0x7fb69000a6c0) at /home/apol/devel/frameworks/kwin/xwl/xwayland.cpp:224
#27 0x000055da99bf3a16 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, KWin::Xwl::Xwayland::continueStartupWithX()::$_7>::call(KWin::Xwl::Xwayland::continueStartupWithX()::$_7&, void**) (f=..., arg=0x7ffec3dfb830)
    at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:146
#28 0x000055da99bf39e1 in QtPrivate::Functor<KWin::Xwl::Xwayland::continueStartupWithX()::$_7, 0>::call<QtPrivate::List<>, void>(KWin::Xwl::Xwayland::continueStartupWithX()::$_7&, void*, void**) (f=..., arg=0x7ffec3dfb830)
    at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:256
#29 0x000055da99bf398c in QtPrivate::QFunctorSlotObject<KWin::Xwl::Xwayland::continueStartupWithX()::$_7, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x7fb69000a6b0, r=0x55da9b155a30, a=0x7ffec3dfb830, ret=0x0) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:439
#30 0x00007fb6b9deb65e in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffec3dfb830, r=0x55da9b155a30, this=0x7fb69000a6b0) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:394
#31 doActivate<false>(QObject*, int, void**) (sender=0x55da9a8d6f90, signal_index=3, argv=0x7ffec3dfb830) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3858
#32 0x00007fb6b9de5d5f in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x55da9a8d6f90, m=m@entry=0x7fb6ba081b60 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffec3dfb830)
    at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3918
#33 0x00007fb6b9deede1 in QSocketNotifier::activated(int, QSocketNotifier::QPrivateSignal) (this=this@entry=0x55da9a8d6f90, _t1=<optimized out>, _t2=...) at .moc/moc_qsocketnotifier.cpp:141
#34 0x00007fb6b9def121 in QSocketNotifier::event(QEvent*) (this=0x55da9a8d6f90, e=0x7ffec3dfbaf0) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qsocketnotifier.cpp:271
#35 0x00007fb6ba8add1f in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=this@entry=0x55da9a6dd820, receiver=receiver@entry=0x55da9a8d6f90, e=e@entry=0x7ffec3dfbaf0) at /home/apol/devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3670
#36 0x00007fb6ba8b6b60 in QApplication::notify(QObject*, QEvent*) (this=0x7ffec3dfc440, receiver=0x55da9a8d6f90, e=0x7ffec3dfbaf0) at /home/apol/devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3416
#37 0x00007fb6b9db683a in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55da9a8d6f90, event=0x7ffec3dfbaf0) at ../../include/QtCore/5.15.0/QtCore/private/../../../../../../../../devel/frameworks/qt5/qtbase/src/corelib/thread/qthread_p.h:325
#38 0x00007fb6b9e0aa2b in QEventDispatcherUNIXPrivate::activateSocketNotifiers() (this=0x55da9a6e3cf0) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp:304
#39 0x00007fb6b9e0ae7b in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp:511
#40 0x00007fb6b4eb6e4d in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at /home/apol/devel/frameworks/qt5/qtbase/src/platformsupport/eventdispatchers/qunixeventdispatcher.cpp:63
#41 0x00007fb6b9db542b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffec3dfbc80, flags=..., flags@entry=...) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/global/qflags.h:141
#42 0x00007fb6b9dbd340 in QCoreApplication::exec() () at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/global/qflags.h:121
#43 0x000055da99bc5774 in main(int, char**) (argc=4, argv=0x7ffec3dfc668) at /home/apol/devel/frameworks/kwin/main_wayland.cpp:676
Comment 1 David Edmundson 2020-02-20 19:28:00 UTC
A drag of what from what? 

I can't reproduce, but I have seen this report before
Comment 2 Aleix Pol 2020-02-20 20:09:16 UTC
I think it was a URL/link. It crashes when it goes over the plasmashell. It might have been from an X11 client.
Comment 3 Patrick Silva 2020-02-28 16:01:05 UTC
possible duplicate of bug 398440
Comment 4 David Edmundson 2020-04-06 16:22:40 UTC

*** This bug has been marked as a duplicate of bug 416499 ***
Comment 5 David Edmundson 2020-04-06 22:22:19 UTC
Git commit 26ce4869a09e0061061c3f1e2cf2333a4ab1eb02 by David Edmundson.
Committed on 06/04/2020 at 22:22.
Pushed by davidedmundson into branch 'master'.

[xwl] Fix crash if same data is requested twice

Summary:
m_dataRequests is a list of transfers for a given selection.
It exists primarily as a ref counting mechanism that matches up
transfers with selections.

If the same data is requested twice we would insert two items into the
list with matching timestamps for the original selection. This then
confuses the callback handling.

Test Plan:
kwin_wayland + chromium
drag and drop a URL onto desktopview. kwin used to crash here
Now a context menu now appears and I can add a link

Reviewers: #kwin

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D28630

M  +1    -2    xwl/drag_x.cpp

https://commits.kde.org/kwin/26ce4869a09e0061061c3f1e2cf2333a4ab1eb02