Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
5.15.2, 6.0.0
-
-
b19b0fbaf775e8b8eda1e03c265a5393d618c6c0 (qt/qtwayland/dev) a3ee3b1ac6752cb1e1bf86f8ef972f7d410e1d50 (qt/tqtc-qtwayland/5.15) c0ef4aa9529453197245f2db36df1d6b064e8532 (qt/qtwayland/6.1)
Description
Hi,
When running the following snippet, the program will segfault as soon as the instantiated window is hidden by the timer:
import QtQuick 2.15 import QtQuick.Window 2.2 Window { component TestPopup: Window { id: win visibility: Window.Windowed width: 150 height: 150 Rectangle { anchors.centerIn: parent width: 100 height: 100 color: "red" RotationAnimation on rotation { loops: Animation.Infinite from: 0 to: 360 } } Timer { running: true repeat: true interval: 500 + Math.random() * 500 onTriggered: { if (win.visibility != Window.Hidden) win.visibility = Window.Hidden; else win.visibility = Window.Windowed; } } } TestPopup { color: "blue" } }
I'm running the snippet with the following command:
QT_QPA_PLATFORM=wayland-egl qml snippet.qml
AFAIK this was working fine in Qt 5.9. What we see is that the platform window is destroyed after a call to setVisible(false), which triggers the destruction of the wl_egl_window and wl_surface. But the scenegraph thread is still using the window for rendering (ie calling swapBuffers), so the process crashes. I can reproduce this on both GNOME/wayland with up to date mesa drivers and also on embedded devices with proprietary drivers.
I can reproduce the issue with both Qt 5.15 and Qt 6.0.
Here's the stack trace with Qt6:
0x00007ffff1534db0 in QtWayland::wl_surface::damage_buffer(int, int, int, int) () from /home/rawoul/Work/Qt/6.0.1/gcc_64/plugins/platforms/../../lib/libQt6WaylandClient.so.6 (gdb) bt #0 0x00007ffff1534db0 in QtWayland::wl_surface::damage_buffer(int, int, int, int) () at /home/rawoul/Work/Qt/6.0.1/gcc_64/plugins/platforms/../../lib/libQt6WaylandClient.so.6 #1 0x00007ffff1503a91 in QtWaylandClient::QWaylandAbstractDecoration::contentImage() () at /home/rawoul/Work/Qt/6.0.1/gcc_64/plugins/platforms/../../lib/libQt6WaylandClient.so.6 #2 0x00007ffff1a21ad1 in () at /home/rawoul/Work/Qt/6.0.1/gcc_64/plugins/platforms/libqwayland-egl.so #3 0x00007ffff6546bff in QOpenGLContext::swapBuffers(QSurface*) () at /home/rawoul/Work/Qt/6.0.1/gcc_64/bin/../lib/libQt6Gui.so.6 #4 0x00007ffff656a451 in () at /home/rawoul/Work/Qt/6.0.1/gcc_64/bin/../lib/libQt6Gui.so.6 #5 0x00007ffff640eedd in QRhi::endFrame(QRhiSwapChain*, QFlags<QRhi::EndFrameFlag>) () at /home/rawoul/Work/Qt/6.0.1/gcc_64/bin/../lib/libQt6Gui.so.6 #6 0x00007fffc615addb in () at /home/rawoul/Work/Qt/6.0.1/gcc_64/qml/QtQuick/../../lib/libQt6Quick.so.6 #7 0x00007fffc615c5f7 in () at /home/rawoul/Work/Qt/6.0.1/gcc_64/qml/QtQuick/../../lib/libQt6Quick.so.6 #8 0x00007ffff5addec6 in () at /home/rawoul/Work/Qt/6.0.1/gcc_64/bin/../lib/libQt6Core.so.6 #9 0x00007ffff5448590 in start_thread (arg=0x7fffc52db640) at pthread_create.c:463 #10 0x00007ffff536e223 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Attachments
Issue Links
- relates to
-
QTBUG-91264 ASSERT on shutdown in Qt Wayland
- Closed
-
QTBUG-92249 quick3d examples crashes or hangs on exit on wayland
- Closed
- resulted from
-
QTBUG-81952 Wayland: Protocol error when moving between sub-menus
- Closed
For Gerrit Dashboard: QTBUG-90037 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
338145,2 | Client: Send SurfaceAboutToBeDestroyed before hide | dev | qt/qtwayland | Status: ABANDONED | -1 | 0 |
344802,4 | client: Gracefully handle shutdown and window hiding | dev | qt/qtwayland | Status: MERGED | +2 | 0 |
351172,3 | client: Gracefully handle shutdown and window hiding | 6.1 | qt/qtwayland | Status: MERGED | +2 | 0 |
351173,1 | client: Gracefully handle shutdown and window hiding | 6.0 | qt/qtwayland | Status: ABANDONED | 0 | 0 |
351175,3 | client: Gracefully handle shutdown and window hiding | tqtc/lts-5.15 | qt/tqtc-qtwayland | Status: MERGED | +2 | 0 |