-
Bug
-
Resolution: Done
-
P1: Critical
-
5.5.0 RC
-
None
-
Debian sid and Ubuntu 14.04, both against the distro's weston, running without any options as an X11 client.
-
10fd51a3e69a0a2ee6b8cd151fa6c847f684253c
Note: this affects not only 5.5: I can reproduce this with Qt 5.2.1 up to dev
When calling hide() on a window that is currently rendered (e.g. by running a QML animation) in a weston compositor there's a chance the whole process will freeze when trying to show() it again.
I can reproduce this on my Debian Sid machine, where the freeze occurs roughly every 10th hide()/show() cycle. On another machine (Ubuntu 14.04) the freeze always happens after the first hide()/show().
It seems like something goes wrong in the communication with weston when hiding the window while being busy rendering the last frame.
Please see the attached example - just run:
qmake && make weston & gdb --args ./wayland-freeze -platform wayland-egl
This will show()/hide() an animated QML window in an endless loop (well not endless – at least until it freezes
)
(gdb)
#0 0xb7fdcd3c in __kernel_vsyscall ()
#1 0xb671bc4b in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:187
#2 0xb67fd43b in QWaitConditionPrivate::wait (this=0x87864f8, time=4294967295) at /home/sandman/git/qt5/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:136
#3 0xb67fd225 in QWaitCondition::wait (this=0x84d4e20, mutex=0x84d4e1c, time=4294967295) at /home/sandman/git/qt5/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:208
#4 0xb7c6fc2c in QSGThreadedRenderLoop::polishAndSync (this=0x808d650, w=0x8787510, inExpose=true)
at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/qsgthreadedrenderloop.cpp:1172
#5 0xb7c6e7c2 in QSGThreadedRenderLoop::handleExposure (this=0x808d650, window=0xbffff414)
at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/qsgthreadedrenderloop.cpp:968
#6 0xb7c6dd24 in QSGThreadedRenderLoop::exposureChanged (this=0x808d650, window=0xbffff414)
at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/qsgthreadedrenderloop.cpp:879
#7 0xb7c9f666 in QQuickWindow::exposeEvent (this=0xbffff414) at /home/sandman/git/qt5/qtdeclarative/src/quick/items/qquickwindow.cpp:207
#8 0xb75944b3 in QWindow::event (this=0xbffff414, ev=0xbffff0f8) at /home/sandman/git/qt5/qtbase/src/gui/kernel/qwindow.cpp:2028
#9 0xb7ca40a9 in QQuickWindow::event (this=0xbffff414, e=0xbffff0f8) at /home/sandman/git/qt5/qtdeclarative/src/quick/items/qquickwindow.cpp:1413
#10 0xb69c0141 in QCoreApplicationPrivate::notify_helper (this=0x804b528, receiver=0xbffff414, event=0xbffff0f8)
at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1081
#11 0xb69bfe3b in QCoreApplication::notify (this=0xbffff428, receiver=0xbffff414, event=0xbffff0f8) at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1026
#12 0xb758382d in QGuiApplication::notify (this=0xbffff428, object=0xbffff414, event=0xbffff0f8) at /home/sandman/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:1540
#13 0xb69bfd48 in QCoreApplication::notifyInternal (this=0xbffff428, receiver=0xbffff414, event=0xbffff0f8)
at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:964
#14 0xb758b4d8 in QCoreApplication::sendSpontaneousEvent (receiver=0xbffff414, event=0xbffff0f8)
at ../../include/QtCore/../../../../qt5/qtbase/src/corelib/kernel/qcoreapplication.h:227
#15 0xb7588357 in QGuiApplicationPrivate::processExposeEvent (e=0x847e480) at /home/sandman/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2646
#16 0xb7583aff in QGuiApplicationPrivate::processWindowSystemEvent (e=0x847e480) at /home/sandman/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:1647
#17 0xb756d53d in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at /home/sandman/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:615
#18 0xb43c87fa in userEventSourceDispatch (source=0x81a6c78) at /home/sandman/git/qt5/qtbase/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp:70
#19 0xb48bdda4 in g_main_context_dispatch () from /lib/i386-linux-gnu/libglib-2.0.so.0
#20 0xb48be0c9 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0
#21 0xb48be196 in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0
#22 0xb6a2ccbd in QEventDispatcherGlib::processEvents (this=0x814e598, flags=...) at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:417
#23 0xb43c8a19 in QPAEventDispatcherGlib::processEvents (this=0x814e598, flags=...)
at /home/sandman/git/qt5/qtbase/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp:115
#24 0xb69bc99b in QEventLoop::processEvents (this=0xbffff3b0, flags=...) at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qeventloop.cpp:128
#25 0xb69bcc4d in QEventLoop::exec (this=0xbffff3b0, flags=...) at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qeventloop.cpp:204
#26 0xb69c045c in QCoreApplication::exec () at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1217
#27 0xb75837e0 in QGuiApplication::exec () at /home/sandman/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:1531
#28 0x08048ee8 in main (argc=1, argv=0xbffff514) at main.cpp:19
(gdb) info thr
Id Target Id Frame
4 Thread 0xb1b65b40 (LWP 7269) "QSGRenderThread" 0xb7fdcd3c in __kernel_vsyscall ()
3 Thread 0xb2f09b40 (LWP 7268) "QQmlThread" 0xb7fdcd3c in __kernel_vsyscall ()
2 Thread 0xb3f53b40 (LWP 7267) "QtWayland" 0xb7fdcd3c in __kernel_vsyscall ()
* 1 Thread 0xb47db700 (LWP 7263) "wayland-freeze" 0xb7fdcd3c in __kernel_vsyscall ()
(gdb) thr 4
[Switching to thread 4 (Thread 0xb1b65b40 (LWP 7269))]
#0 0xb7fdcd3c in __kernel_vsyscall ()
(gdb) bt
#0 0xb7fdcd3c in __kernel_vsyscall ()
#1 0xb64ef5bb in poll () at ../sysdeps/unix/syscall-template.S:81
#2 0xb6742273 in poll (__timeout=-1, __nfds=1, __fds=0xb1b649ac) at /usr/include/i386-linux-gnu/bits/poll2.h:46
#3 wl_display_dispatch_queue (display=0xb3603310, queue=0x80727c0) at ../src/wayland-client.c:1432
#4 0xb415bae4 in get_back_bo (dri2_surf=dri2_surf@entry=0xb1202a80) at ../../../../../../src/egl/drivers/dri2/platform_wayland.c:321
#5 0xb415bc46 in update_buffers (dri2_surf=dri2_surf@entry=0xb1202a80) at ../../../../../../src/egl/drivers/dri2/platform_wayland.c:421
#6 0xb415be14 in image_get_buffers (driDrawable=0xb1202c10, format=4099, stamp=0xb1202c30, loaderPrivate=0xb1202a80, buffer_mask=1, buffers=0xb1b64ab0)
at ../../../../../../src/egl/drivers/dri2/platform_wayland.c:537
#7 0xb32270e8 in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#8 0xb322757c in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#9 0xb321a279 in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#10 0xb2f43eed in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#11 0xb7c1d357 in QOpenGLFunctions::glClear (this=0xb1203248, mask=17664)
at /home/sandman/git/x11-5/qtbase/include/QtGui/../../../../qt5/qtbase/src/gui/opengl/qopenglfunctions.h:592
#12 0xb7c2e942 in QSGBindable::clear (this=0xb1b65034, mode=...) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/coreapi/qsgrenderer.cpp:55
#13 0xb7c184e2 in QSGBatchRenderer::Renderer::renderBatches (this=0xb1203990) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp:2474
#14 0xb7c19c50 in QSGBatchRenderer::Renderer::render (this=0xb1203990) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp:2696
#15 0xb7c2efbb in QSGRenderer::renderScene (this=0xb1203990, bindable=...) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/coreapi/qsgrenderer.cpp:208
#16 0xb7c2eda3 in QSGRenderer::renderScene (this=0xb1203990, fboId=0) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/coreapi/qsgrenderer.cpp:168
#17 0xb7c49384 in QSGRenderContext::renderNextFrame (this=0x8056630, renderer=0xb1203990, fboId=0) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/qsgcontext.cpp:554
#18 0xb7ca00ea in QQuickWindowPrivate::renderSceneGraph (this=0x8443790, size=...) at /home/sandman/git/qt5/qtdeclarative/src/quick/items/qquickwindow.cpp:382
#19 0xb7c6c4af in QSGRenderThread::syncAndRender (this=0x84d4df8) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/qsgthreadedrenderloop.cpp:618
#20 0xb7c6cef0 in QSGRenderThread::run (this=0x84d4df8) at /home/sandman/git/qt5/qtdeclarative/src/quick/scenegraph/qsgthreadedrenderloop.cpp:699
#21 0xb67fbda4 in QThreadPrivate::start (arg=0x84d4df8) at /home/sandman/git/qt5/qtbase/src/corelib/thread/qthread_unix.cpp:331
#22 0xb6717efb in start_thread (arg=0xb1b65b40) at pthread_create.c:309
#23 0xb64f9dfe in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129
(gdb) thr 2
[Switching to thread 2 (Thread 0xb3f53b40 (LWP 7267))]
#0 0xb7fdcd3c in __kernel_vsyscall ()
(gdb) bt
#0 0xb7fdcd3c in __kernel_vsyscall ()
#1 0xb64ef5bb in poll () at ../sysdeps/unix/syscall-template.S:81
#2 0xb48cd0b0 in g_poll () from /lib/i386-linux-gnu/libglib-2.0.so.0
#3 0xb48be054 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0
#4 0xb48be196 in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0
#5 0xb6a2ccbd in QEventDispatcherGlib::processEvents (this=0xb3600468, flags=...) at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:417
#6 0xb69bc99b in QEventLoop::processEvents (this=0xb3f532b8, flags=...) at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qeventloop.cpp:128
#7 0xb69bcc4d in QEventLoop::exec (this=0xb3f532b8, flags=...) at /home/sandman/git/qt5/qtbase/src/corelib/kernel/qeventloop.cpp:204
#8 0xb67f4cfe in QThread::exec (this=0x804f9f8) at /home/sandman/git/qt5/qtbase/src/corelib/thread/qthread.cpp:502
#9 0xb67f4ea7 in QThread::run (this=0x804f9f8) at /home/sandman/git/qt5/qtbase/src/corelib/thread/qthread.cpp:569
#10 0xb67fbda4 in QThreadPrivate::start (arg=0x804f9f8) at /home/sandman/git/qt5/qtbase/src/corelib/thread/qthread_unix.cpp:331
#11 0xb6717efb in start_thread (arg=0xb3f53b40) at pthread_create.c:309
#12 0xb64f9dfe in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129
- relates to
-
QTBUG-47902 Hiding QTWayland with wl_buffer NULL is not correct
-
- Closed
-