Details
-
Bug
-
Resolution: Unresolved
-
P1: Critical
-
None
-
5.15.16
Description
Running qwindow-compositor in valgrind sometimes shows that the compositor touches already freed objects:
Invalid read of size 8 in Compositor::handleDrag(View*, QMouseEvent*) in /home/user/qwindow-compositor/compositor.cpp:506 1: load in /opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/bits/atomic_base.h:713 2: load in /opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/atomic:416 3: loadRelaxed<QtSharedPointer::ExternalRefCountData*> in /home/qt/work/qt/qtbase/src/corelib/../../include/QtCore/../../src/corelib/thread/qatomic_cxx11.h:239 4: loadRelaxed in /home/qt/work/qt/qtbase/src/corelib/../../include/QtCore/../../src/corelib/thread/qbasicatomic.h:248 5: QtSharedPointer::ExternalRefCountData::getAndRef(QObject const*) in /home/qt/work/qt/qtbase/src/corelib/tools/qsharedpointer.cpp:1445 6: QWeakPointer<QtWayland::DataSource, 1u> in /home/qt/work/install/include/QtCore/qsharedpointer_impl.h:685 7: QPointer in /home/qt/work/install/include/QtCore/qpointer.h:62 8: QtWayland::DataOffer::DataOffer(QtWayland::DataSource*, QtWaylandServer::wl_data_device::Resource*) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwldataoffer.cpp:44 9: QtWayland::DataDevice::setDragFocus(QWaylandSurface*, QPointF const&) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwldatadevice.cpp:103 10: QtWayland::DataDevice::dragMove(QWaylandSurface*, QPointF const&) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwldatadevice.cpp:129 11: Compositor::handleDrag(View*, QMouseEvent*) in /home/user/qwindow-compositor/compositor.cpp:506 12: Window::mouseMoveEvent(QMouseEvent*) in /home/user/qwindow-compositor/window.cpp:255 13: QWindow::event(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qwindow.cpp:2461 14: QPaintDeviceWindow::event(QEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qpaintdevicewindow.cpp:206 15: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1064 16: QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qguiapplication.cpp:2285 17: QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qguiapplication.cpp:2005 18: QWindowSystemEventHandler::sendEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) in /home/qt/work/qt/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:193 19: QtWayland::WindowSystemEventHandler::sendEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) in /home/qt/work/qt/qtwayland/src/compositor/compositor_api/qwaylandcompositor.cpp:104 20: QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1165 21: xcbSourceDispatch(_GSource*, int (*)(void*), void*) in /home/qt/work/qt/qtbase/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp:105 22: g_main_context_dispatch in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4 23: /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4 24: g_main_context_iteration in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4 25: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:423 26: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:235 27: QCoreApplication::exec() in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1375 28: main in /home/user/qwindow-compositor/main.cpp:65 Address 0xc876d38 is 8 bytes inside a block of size 120 free'd 1: operator delete(void*, unsigned long) in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so 2: QtWaylandServer::wl_data_source::destroy_func(wl_resource*) in /home/qt/work/qt/qtwayland/src/compositor/qwayland-server-wayland.cpp:1426 3: /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 4: wl_resource_destroy in /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 5: /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 6: /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 7: /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 8: /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 9: wl_event_loop_dispatch in /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 10: QWaylandCompositor::processWaylandEvents() in /home/qt/work/qt/qtwayland/src/compositor/compositor_api/qwaylandcompositor.cpp:819 11: QWaylandCompositor::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) in /home/qt/work/qt/qtwayland/src/compositor/.moc/moc_qwaylandcompositor.cpp:195 12: void doActivate<false>(QObject*, int, void**) in /home/qt/work/qt/qtbase/src/corelib/kernel/qobject.cpp:3937 13: QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) in /home/qt/work/qt/qtbase/src/corelib/.moc/moc_qsocketnotifier.cpp:178 14: QSocketNotifier::event(QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qsocketnotifier.cpp:302 15: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1064 16: socketNotifierSourceDispatch(_GSource*, int (*)(void*), void*) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:107 17: g_main_context_dispatch in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4 18: /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4 19: g_main_context_iteration in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4 20: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:423 21: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:235 22: QCoreApplication::exec() in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1375 23: main in /home/user/qwindow-compositor/main.cpp:65 Block was alloc'd at 1: operator new(unsigned long) in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so 2: QtWayland::DataDeviceManager::data_device_manager_create_data_source(QtWaylandServer::wl_data_device_manager::Resource*, unsigned int) in /home/qt/work/qt/qtwayland/src/compositor/wayland_wrapper/qwldatadevicemanager.cpp:231 3: /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 4: /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 5: /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 6: /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 7: wl_event_loop_dispatch in /usr/lib/x86_64-linux-gnu/libwayland-server.so.0.20.0 8: QWaylandCompositor::processWaylandEvents() in /home/qt/work/qt/qtwayland/src/compositor/compositor_api/qwaylandcompositor.cpp:819 9: QWaylandCompositor::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) in /home/qt/work/qt/qtwayland/src/compositor/.moc/moc_qwaylandcompositor.cpp:195 10: void doActivate<false>(QObject*, int, void**) in /home/qt/work/qt/qtbase/src/corelib/kernel/qobject.cpp:3937 11: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:410 12: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) in /home/qt/work/qt/qtbase/src/corelib/kernel/qeventloop.cpp:235 13: QCoreApplication::exec() in /home/qt/work/qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1375 14: main in /home/user/qwindow-compositor/main.cpp:65
This can be reproduced by running attached example there and dragging and dropping items between the two QListWidgets fast.
I haven't been able to reproduce this in Qt 6.7.