Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.0.0
-
None
-
Wayland 1.0.4
Weston 1.0.4
libdrm 2.4.42
mesa 9.1 branch 4bc85f9aac46d2442eb6194bd15c5995b281071f
Description
This is because we get deadlocks when using wayland-egl with mesa (most common wayland-egl implementation). Performance of QtQuick 2.0 applications suffers significantly with wayland because of this, so it is important to find a work around for this to prevent deadlocks.
To enable threaded rendering with wayland-egl make sure that QWaylandEglIntegration::supportsThreadedOpenGL() returns true:
bool QWaylandEglIntegration::supportsThreadedOpenGL() const { //Change to true to enable threaded rendering return true; }
Running a QtQuick 2 example: qtdeclarative/examples/quick/particles/affectors/
Shows deadlock in Threads 1 and 4 where thread 4 is the Qt Scene Graph render thread which calls eglSwapBuffers.
Thread 4 (Thread 0x7fffe6746700 (LWP 12902)): #0 pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 No locals. #1 0x00007ffff14a4932 in dispatch_queue (display=0x7eab20, queue=0x822f30, block=1) at wayland-client.c:887 len = <optimized out> count = <optimized out> ret = <optimized out> #2 0x00007ffff0e8a945 in dri2_swap_buffers (drv=<optimized out>, disp=<optimized out>, draw=0x7fffdc163b20) at platform_wayland.c:452 dri2_dpy = 0x80bb50 i = <optimized out> ret = <optimized out> #3 0x00007ffff0e7ea85 in eglSwapBuffers (dpy=0x8125e0, surface=0x7fffdc163b20) at eglapi.c:698 ctx = 0x7fffdc002b50 surf = 0xffffffffffffffff drv = 0xfffffffffffffe00 ret = <optimized out> __FUNCTION__ = "eglSwapBuffers" #4 0x00007ffff1944f2c in QWaylandGLContext::swapBuffers (this=0x7fffdc002860, surface=0x883bf0) at qwaylandglcontext.cpp:180 window = 0x883bf0 eglSurface = 0x7fffdc163b20 __PRETTY_FUNCTION__ = "virtual void QWaylandGLContext::swapBuffers(QPlatformSurface*)" #5 0x00007ffff71986db in QOpenGLContext::swapBuffers (this=0x7fffdc0027d0, surface=0x7fffffffe2d0) at kernel/qopenglcontext.cpp:610 d = 0x7fffdc0028b0 __PRETTY_FUNCTION__ = "void QOpenGLContext::swapBuffers(QSurface*)" surfaceHandle = 0x883bf0 #6 0x00007ffff78fe51e in QSGRenderThread::syncAndRender (this=0x831660) at scenegraph/qsgthreadedrenderloop.cpp:576 w = @0x7fffdc0027b0: {window = 0x7fffffffe2c0, size = {wd = 320, ht = 480}} d = 0x830fa0 i = 0 __PRETTY_FUNCTION__ = "void QSGRenderThread::syncAndRender()" #7 0x00007ffff78fe670 in QSGRenderThread::run (this=0x831660) at scenegraph/qsgthreadedrenderloop.cpp:601 No locals. #8 0x00007ffff69cde37 in QThreadPrivate::start (arg=0x831660) at thread/qthread_unix.cpp:333 __clframe = {__cancel_routine = 0x7ffff69cdebc <QThreadPrivate::finish(void*)>, __cancel_arg = 0x831660, __do_it = 1, __cancel_type = 0} thr = 0x831660 data = 0x8317f0 objectName = {static null = {<No data fields>}, d = 0x7ffff704f280} #9 0x00007ffff48e0e9a in start_thread (arg=0x7fffe6746700) at pthread_create.c:308 __res = <optimized out> pd = 0x7fffe6746700 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {1, 651741289458117141, 140737488346224, 140737059776960, 0, 3, -651685114463704555, -651726566797399531}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = 0 pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #10 0x00007ffff6656cbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 No locals. #11 0x0000000000000000 in ?? () No symbol table info available. Thread 3 (Thread 0x7ffff7ff0700 (LWP 12892)): #0 sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:86 No locals. #1 0x00007ffff57943d7 in v8::internal::LinuxSemaphore::Wait (this=0x7fffe00008c0) at ../3rdparty/v8/src/platform-linux.cc:885 result = 32767 #2 0x00007ffff5668181 in v8::internal::RuntimeProfiler::WaitForSomeIsolateToEnterJS () at ../3rdparty/v8/src/runtime-profiler.cc:452 old_state = 0 #3 0x00007ffff5668347 in v8::internal::RuntimeProfilerRateLimiter::SuspendIfNecessary (this=0x86ce2c) at ../3rdparty/v8/src/runtime-profiler.cc:499 No locals. #4 0x00007ffff5795444 in v8::internal::SignalSender::Run (this=0x86ce00) at ../3rdparty/v8/src/platform-linux.cc:1165 cpu_profiling_enabled = false runtime_profiler_enabled = true state = v8::internal::SamplerRegistry::HAS_SAMPLERS #5 0x00007ffff5794138 in v8::internal::ThreadEntry (arg=0x86ce00) at ../3rdparty/v8/src/platform-linux.cc:761 thread = 0x86ce00 #6 0x00007ffff48e0e9a in start_thread (arg=0x7ffff7ff0700) at pthread_create.c:308 __res = <optimized out> pd = 0x7ffff7ff0700 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {1, 651741289458117141, 140737488346272, 140737354074560, 0, 3, -651723688638731755, -651726566797399531}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = 0 pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #7 0x00007ffff6656cbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 No locals. #8 0x0000000000000000 in ?? () No symbol table info available. Thread 2 (Thread 0x7fffed7f9700 (LWP 12891)): #0 0x00007ffff664b303 in __GI___poll (fds=<optimized out>, nfds=<optimized out>, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:87 resultvar = <optimized out> oldtype = 0 result = <optimized out> #1 0x00007ffff367fd76 in g_main_context_poll (n_fds=1, fds=0x7fffe80029b0, timeout=-1, context=0x7fffe8000990, priority=<optimized out>) at gmain.c:3653 poll_func = 0x7ffff368cf30 <g_poll> #2 g_main_context_iterate (dispatch=1, block=<optimized out>, context=0x7fffe8000990, self=<optimized out>) at gmain.c:3354 timeout = -1 some_ready = <optimized out> fds = 0x7fffe80029b0 max_priority = 2147483647 nfds = 1 allocated_nfds = <optimized out> #3 g_main_context_iterate (context=0x7fffe8000990, block=<optimized out>, dispatch=1, self=<optimized out>) at gmain.c:3296 some_ready = -402642512 #4 0x00007ffff367fe94 in g_main_context_iteration (context=0x7fffe8000990, may_block=1) at gmain.c:3420 retval = <optimized out> #5 0x00007ffff6c14313 in QEventDispatcherGlib::processEvents (this=0x7fffe80008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:423 d = 0x7fffe80008e0 canWait = true savedFlags = {i = 0} result = false #6 0x00007ffff6b9fa4b in QEventLoop::processEvents (this=0x7fffed7f8da0, flags=...) at kernel/qeventloop.cpp:136 d = 0x7fffe8002920 #7 0x00007ffff6b9fd19 in QEventLoop::exec (this=0x7fffed7f8da0, flags=...) at kernel/qeventloop.cpp:212 locker = {val = 8593760} __PRETTY_FUNCTION__ = "int QEventLoop::exec(QEventLoop::ProcessEventsFlags)" ref = {d = 0x7fffe8002920, locker = @0x7fffed7f8d40, exceptionCaught = true} app = 0x7fffffffe2f0 d = 0x7fffe8002920 #8 0x00007ffff69c7576 in QThread::exec (this=0x832060) at thread/qthread.cpp:520 d = 0x8320f0 locker = {val = 8593760} eventLoop = {<QObject> = {_vptr.QObject = 0x7ffff704c3f0, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff70520c0, data = 0x7ffff6d1cc80, static_metacall = 0x7ffff6be579e <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x7fffe8002920}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff7052c20, data = 0x7ffff6d68ee0, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff7048ca0, stringdata = 0x7ffff7062c00, data = 0x7ffff6d6e700, static_metacall = 0x7ffff6c6d5e4 <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}} returnCode = 0 #9 0x00007ffff619cc5d in QQmlThreadPrivate::run (this=0x832060) at qml/ftw/qqmlthread.cpp:148 No locals. #10 0x00007ffff69cde37 in QThreadPrivate::start (arg=0x832060) at thread/qthread_unix.cpp:333 __clframe = {__cancel_routine = 0x7ffff69cdebc <QThreadPrivate::finish(void*)>, __cancel_arg = 0x832060, __do_it = 1, __cancel_type = 0} thr = 0x832060 data = 0x832210 objectName = {static null = {<No data fields>}, d = 0x7ffff704f280} #11 0x00007ffff48e0e9a in start_thread (arg=0x7fffed7f9700) at pthread_create.c:308 __res = <optimized out> pd = 0x7fffed7f9700 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {1, 651741289458117141, 140737488347360, 140737177950656, 0, 3, -651709399819408875, -651726566797399531}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = 0 pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #12 0x00007ffff6656cbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 No locals. #13 0x0000000000000000 in ?? () No symbol table info available. Thread 1 (Thread 0x7ffff7fcb740 (LWP 12887)): #0 pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 No locals. #1 0x00007ffff69cf5cd in QWaitConditionPrivate::wait (this=0x831920, time=18446744073709551615) at thread/qwaitcondition_unix.cpp:116 code = 0 #2 0x00007ffff69cf3bb in QWaitCondition::wait (this=0x8316a8, mutex=0x8316a0, time=18446744073709551615) at thread/qwaitcondition_unix.cpp:188 __PRETTY_FUNCTION__ = "bool QWaitCondition::wait(QMutex*, long unsigned int)" returnValue = false #3 0x00007ffff78ff36a in QSGThreadedRenderLoop::polishAndSync (this=0x830b30) at scenegraph/qsgthreadedrenderloop.cpp:922 timer = {t1 = 140737488346352, t2 = 140737332802230} polishTime = 0 waitTime = 0 __PRETTY_FUNCTION__ = "void QSGThreadedRenderLoop::polishAndSync()" event = 0x818d30 #4 0x00007ffff78ff4c5 in QSGThreadedRenderLoop::event (this=0x830b30, e=0x7fffffffdf00) at scenegraph/qsgthreadedrenderloop.cpp:945 No locals. #5 0x00007ffff6ba314e in QCoreApplicationPrivate::notify_helper (this=0x7db5a0, receiver=0x830b30, event=0x7fffffffdf00) at kernel/qcoreapplication.cpp:924 No locals. #6 0x00007ffff6ba2e42 in QCoreApplication::notify (this=0x7fffffffe2f0, receiver=0x830b30, event=0x7fffffffdf00) at kernel/qcoreapplication.cpp:869 d = 0x7db5a0 __PRETTY_FUNCTION__ = "virtual bool QCoreApplication::notify(QObject*, QEvent*)" #7 0x00007ffff7158f38 in QGuiApplication::notify (this=0x7fffffffe2f0, object=0x830b30, event=0x7fffffffdf00) at kernel/qguiapplication.cpp:1213 No locals. #8 0x00007ffff6ba2d4e in QCoreApplication::notifyInternal (this=0x7fffffffe2f0, receiver=0x830b30, event=0x7fffffffdf00) at kernel/qcoreapplication.cpp:807 threadData = 0x7db6c0 loopLevelCounter = {threadData = 0x7db6c0} result = false cbdata = {0x830b30, 0x7fffffffdf00, 0x7fffffffde9f} d = 0x838d80 #9 0x00007ffff6ba685f in QCoreApplication::sendEvent (receiver=0x830b30, event=0x7fffffffdf00) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:201 No locals. #10 0x00007ffff6c1274e in QTimerInfoList::activateTimers (this=0x7ea550) at kernel/qtimerinfo_unix.cpp:644 e = {<QEvent> = {_vptr.QEvent = 0x7ffff7048b50, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff7062dc0, data = 0x7ffff6d6e900, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}, d = 0x0, t = 1, posted = 0, spont = 0, m_accept = 1, reserved = 8191}, id = 1} currentTimerInfo = 0x0 n_act = 1 maxCount = 0 currentTime = {tv_sec = 167078, tv_nsec = 173554674} #11 0x00007ffff6c138ed in timerSourceDispatch (source=0x7ea4f0) at kernel/qeventdispatcher_glib.cpp:185 timerSource = 0x7ea4f0 #12 0x00007ffff367fa93 in g_main_dispatch (context=0x7e9300) at gmain.c:2784 dispatch = 0x7ffff6c13880 <timerSourceDispatch(GSource*, GSourceFunc, gpointer)> was_in_call = 0 user_data = 0x0 callback = 0 cb_funcs = 0x0 cb_data = 0x0 current_source_link = {data = 0x7ea4f0, next = 0x0} need_destroy = <optimized out> source = 0x7ea4f0 current = 0x7e8fb0 i = <optimized out> #13 g_main_context_dispatch (context=0x7e9300) at gmain.c:3288 No locals. #14 0x00007ffff367fdd8 in g_main_context_iterate (dispatch=1, block=<optimized out>, context=0x7e9300, self=<optimized out>) at gmain.c:3359 timeout = 5 some_ready = 1 fds = <optimized out> max_priority = 2147483647 nfds = 3 allocated_nfds = <optimized out> #15 g_main_context_iterate (context=0x7e9300, block=<optimized out>, dispatch=1, self=<optimized out>) at gmain.c:3296 some_ready = 1 #16 0x00007ffff367fe94 in g_main_context_iteration (context=0x7e9300, may_block=1) at gmain.c:3420 retval = <optimized out> #17 0x00007ffff6c14313 in QEventDispatcherGlib::processEvents (this=0x7de980, flags=...) at kernel/qeventdispatcher_glib.cpp:423 d = 0x7def90 canWait = true savedFlags = {i = 0} result = false #18 0x00007ffff196292a in QPAEventDispatcherGlib::processEvents (this=0x7de980, flags=...) at eventdispatchers/qeventdispatcher_glib.cpp:123 No locals. #19 0x00007ffff6b9fa4b in QEventLoop::processEvents (this=0x7fffffffe250, flags=...) at kernel/qeventloop.cpp:136 d = 0x897380 #20 0x00007ffff6b9fd19 in QEventLoop::exec (this=0x7fffffffe250, flags=...) at kernel/qeventloop.cpp:212 locker = {val = 8239040} __PRETTY_FUNCTION__ = "int QEventLoop::exec(QEventLoop::ProcessEventsFlags)" ref = {d = 0x897380, locker = @0x7fffffffe1b0, exceptionCaught = true} app = 0x7fffffffe2f0 d = 0x897380 #21 0x00007ffff6ba33da in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1060 threadData = 0x7db6c0 __PRETTY_FUNCTION__ = "static int QCoreApplication::exec()" eventLoop = {<QObject> = {_vptr.QObject = 0x7ffff704c3f0, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff70520c0, data = 0x7ffff6d1cc80, static_metacall = 0x7ffff6be579e <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x897380}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff7052c20, data = 0x7ffff6d68ee0, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff7048ca0, stringdata = 0x7ffff7062c00, data = 0x7ffff6d6e700, static_metacall = 0x7ffff6c6d5e4 <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}} returnCode = 0 #22 0x00007ffff7158e60 in QGuiApplication::exec () at kernel/qguiapplication.cpp:1192 No locals. #23 0x0000000000401085 in main (argc=1, argv=0x7fffffffe478) at main.cpp:41 app = {<QCoreApplication> = {<QObject> = {_vptr.QObject = 0x7ffff776a630, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff70520c0, data = 0x7ffff6d1cc80, static_metacall = 0x7ffff6be579e <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x7db5a0}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff7052c20, data = 0x7ffff6d68ee0, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff7048ca0, stringdata = 0x7ffff7062c60, data = 0x7ffff6d6e800, static_metacall = 0x7ffff6c6d73c <QCoreApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, static self = 0x7fffffffe2f0}, static staticMetaObject = {d = {superdata = 0x7ffff704c480, stringdata = 0x7ffff7775f00, data = 0x7ffff7462c60, static_metacall = 0x7ffff715e43c <QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}} view = {<QQuickWindow> = {<QWindow> = {<QObject> = {_vptr.QObject = 0x7ffff7db59b0, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff70520c0, data = 0x7ffff6d1cc80, static_metacall = 0x7ffff6be579e <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x830fa0}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff7052c20, data = 0x7ffff6d68ee0, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}}, <QSurface> = {_vptr.QSurface = 0x7ffff7db5ad8, m_type = QSurface::Window, m_reserved = 0x0}, static staticMetaObject = {d = {superdata = 0x7ffff7048ca0, stringdata = 0x7ffff777cf60, data = 0x7ffff74a2400, static_metacall = 0x7ffff7455b2c <QWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff7770640, stringdata = 0x7ffff7dbf9c0, data = 0x7ffff7ab8a60, static_metacall = 0x7ffff792e038 <QQuickWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff7da3860, stringdata = 0x7ffff7dd0d20, data = 0x7ffff7ae1040, static_metacall = 0x7ffff7a877f8 <QQuickView::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}
The second example is a QWindow based OpenGL called hellowindow. It can be found in qtbase/examples/opengl/hellowindow/
In hellowindow there are 3 window surfaces 2 threads and 2 OpenGL contexts.
Window A - Thread A - Context A
Window B - Thread A - Context A
Window C - Thread B - Context B
This example demonstrates the possible combinations of Window, Thread, and OpenGL Contexts.
From the following backtrace you can see that when the Renderer in Thread A calls eglSwapBuffers at the same time as the renderer in Thread B, there is a deadlock:
Thread 2 (Thread 0x7fffece22700 (LWP 13609)): #0 pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 No locals. #1 0x00007ffff2d5e932 in dispatch_queue (display=0x61e100, queue=0x6566f0, block=1) at wayland-client.c:887 len = <optimized out> count = <optimized out> ret = <optimized out> #2 0x00007ffff2744945 in dri2_swap_buffers (drv=<optimized out>, disp=<optimized out>, draw=0x7fffe8002c70) at platform_wayland.c:452 dri2_dpy = 0x64bfd0 i = <optimized out> ret = <optimized out> #3 0x00007ffff2738a85 in eglSwapBuffers (dpy=0x623e00, surface=0x7fffe8002c70) at eglapi.c:698 ctx = 0x9e6630 surf = 0xffffffffffffffff drv = 0xfffffffffffffe00 ret = <optimized out> __FUNCTION__ = "eglSwapBuffers" #4 0x00007ffff31fef2c in QWaylandGLContext::swapBuffers (this=0xaf9f80, surface=0xcbb200) at qwaylandglcontext.cpp:180 window = 0xcbb200 eglSurface = 0x7fffe8002c70 __PRETTY_FUNCTION__ = "virtual void QWaylandGLContext::swapBuffers(QPlatformSurface*)" #5 0x00007ffff77ee6db in QOpenGLContext::swapBuffers (this=0xae6b50, surface=0xc7eff0) at kernel/qopenglcontext.cpp:610 d = 0xaeb4e0 __PRETTY_FUNCTION__ = "void QOpenGLContext::swapBuffers(QSurface*)" surfaceHandle = 0xcbb200 #6 0x00000000004045ae in Renderer::render (this=0x9e5e30, surface=0xc7eff0, color=..., viewSize=...) at hellowindow.cpp:146 modelview = {m = {{0.999700725, 0.0174497478, -0.0171452072, 0}, {-0.0171452072, 0.99969542, 0.017751677, 0}, {0.0174497478, -0.0174524058, 0.99969542, 0}, {0.00342904148, -0.199939087, -0.00355033553, 1}}, flagBits = 13} #7 0x0000000000408f27 in Renderer::qt_static_metacall (_o=0x9e5e30, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0xc0f3b0) at .moc/debug-shared/moc_hellowindow.cpp:72 _t = 0x9e5e30 #8 0x00007ffff7231bf3 in QMetaCallEvent::placeMetaCall (this=0x8dadc0, object=0x9e5e30) at kernel/qobject.cpp:479 No locals. #9 0x00007ffff7232b0c in QObject::event (this=0x9e5e30, e=0x8dadc0) at kernel/qobject.cpp:1070 mce = 0x8dadc0 sw = {receiver = 0x9e5e30, previousSender = 0x0, currentSender = {sender = 0xc7efe0, signal = 18, ref = 1}, switched = true} #10 0x00007ffff71f914e in QCoreApplicationPrivate::notify_helper (this=0x60e810, receiver=0x9e5e30, event=0x8dadc0) at kernel/qcoreapplication.cpp:924 No locals. #11 0x00007ffff71f8e42 in QCoreApplication::notify (this=0x7fffffffe0f0, receiver=0x9e5e30, event=0x8dadc0) at kernel/qcoreapplication.cpp:869 d = 0x60e810 __PRETTY_FUNCTION__ = "virtual bool QCoreApplication::notify(QObject*, QEvent*)" #12 0x00007ffff77aef38 in QGuiApplication::notify (this=0x7fffffffe0f0, object=0x9e5e30, event=0x8dadc0) at kernel/qguiapplication.cpp:1213 No locals. #13 0x00007ffff71f8d4e in QCoreApplication::notifyInternal (this=0x7fffffffe0f0, receiver=0x9e5e30, event=0x8dadc0) at kernel/qcoreapplication.cpp:807 threadData = 0xccd600 loopLevelCounter = {threadData = 0xccd600} result = false cbdata = {0x9e5e30, 0x8dadc0, 0x7fffece219cf} d = 0xb15a90 #14 0x00007ffff71fc85f in QCoreApplication::sendEvent (receiver=0x9e5e30, event=0x8dadc0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:201 No locals. #15 0x00007ffff71f9e16 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0xccd600) at kernel/qcoreapplication.cpp:1408 pe = @0xcfed78: {receiver = 0x9e5e30, event = 0x0, priority = 0} e = {d = 0x8dadc0} r = 0x9e5e30 unlocker = {m = @0x7fffece21a90} __PRETTY_FUNCTION__ = "static void QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)" locker = {val = 13424200} startOffset = 0 i = @0xccd63c: 1 cleanup = {receiver = 0x0, event_type = 0, data = 0xccd600, exceptionCaught = true} #16 0x00007ffff71f99dd in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at kernel/qcoreapplication.cpp:1268 data = 0xccd600 #17 0x00007ffff7269ad7 in postEventSourceDispatch (s=0x7fffe80012c0) at kernel/qeventdispatcher_glib.cpp:278 source = 0x7fffe80012c0 #18 0x00007ffff4f39a93 in g_main_dispatch (context=0x7fffe8000990) at gmain.c:2784 dispatch = 0x7ffff7269a93 <postEventSourceDispatch(GSource*, GSourceFunc, gpointer)> was_in_call = 0 user_data = 0x0 callback = 0 cb_funcs = 0x0 cb_data = 0x0 current_source_link = {data = 0x7fffe80012c0, next = 0x0} need_destroy = <optimized out> source = 0x7fffe80012c0 current = 0x7fffe8001c50 i = <optimized out> #19 g_main_context_dispatch (context=0x7fffe8000990) at gmain.c:3288 No locals. #20 0x00007ffff4f39dd8 in g_main_context_iterate (dispatch=1, block=<optimized out>, context=0x7fffe8000990, self=<optimized out>) at gmain.c:3359 timeout = 0 some_ready = 1 fds = <optimized out> max_priority = 0 nfds = 1 allocated_nfds = <optimized out> #21 g_main_context_iterate (context=0x7fffe8000990, block=<optimized out>, dispatch=1, self=<optimized out>) at gmain.c:3296 some_ready = 1 #22 0x00007ffff4f39e94 in g_main_context_iteration (context=0x7fffe8000990, may_block=1) at gmain.c:3420 retval = <optimized out> #23 0x00007ffff726a313 in QEventDispatcherGlib::processEvents (this=0x7fffe80008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:423 d = 0x7fffe80008e0 canWait = true savedFlags = {i = 0} result = false #24 0x00007ffff71f5a4b in QEventLoop::processEvents (this=0x7fffece21da0, flags=...) at kernel/qeventloop.cpp:136 d = 0x7fffe8002920 #25 0x00007ffff71f5d19 in QEventLoop::exec (this=0x7fffece21da0, flags=...) at kernel/qeventloop.cpp:212 locker = {val = 13374032} __PRETTY_FUNCTION__ = "int QEventLoop::exec(QEventLoop::ProcessEventsFlags)" ref = {d = 0x7fffe8002920, locker = @0x7fffece21d40, exceptionCaught = true} app = 0x7fffffffe0f0 d = 0x7fffe8002920 #26 0x00007ffff701d576 in QThread::exec (this=0xb6b650) at thread/qthread.cpp:520 d = 0xcc11e0 locker = {val = 13374032} eventLoop = {<QObject> = {_vptr.QObject = 0x7ffff76a23f0, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff76a80c0, data = 0x7ffff7372c80, static_metacall = 0x7ffff723b79e <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x7fffe8002920}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff76a8c20, data = 0x7ffff73beee0, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff769eca0, stringdata = 0x7ffff76b8c00, data = 0x7ffff73c4700, static_metacall = 0x7ffff72c35e4 <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}} returnCode = 0 #27 0x00007ffff701d70c in QThread::run (this=0xb6b650) at thread/qthread.cpp:587 No locals. #28 0x00007ffff7023e37 in QThreadPrivate::start (arg=0xb6b650) at thread/qthread_unix.cpp:333 __clframe = {__cancel_routine = 0x7ffff7023ebc <QThreadPrivate::finish(void*)>, __cancel_arg = 0xb6b650, __do_it = 1, __cancel_type = 0} thr = 0xb6b650 data = 0xccd600 objectName = {static null = {<No data fields>}, d = 0x7ffff76a5280} #29 0x00007ffff619ae9a in start_thread (arg=0x7fffece22700) at pthread_create.c:308 __res = <optimized out> pd = 0x7fffece22700 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {1, -772276806066164596, 140737488347248, 140737167632832, 0, 3, 772239320689355916, 772295204113165452}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = 0 pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #30 0x00007ffff64a3cbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 No locals. #31 0x0000000000000000 in ?? () No symbol table info available. Thread 1 (Thread 0x7ffff7fcd740 (LWP 13606)): #0 __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:132 No locals. #1 0x00007ffff619d065 in _L_lock_858 () from /lib/x86_64-linux-gnu/libpthread.so.0 No symbol table info available. #2 0x00007ffff619ceba in __pthread_mutex_lock (mutex=0x623e08) at pthread_mutex_lock.c:61 __PRETTY_FUNCTION__ = "__pthread_mutex_lock" type = 6438408 #3 0x00007ffff27389eb in _eglLockMutex (m=0x623e08) at eglmutex.h:53 No locals. #4 _eglLockDisplay (display=0x623e00) at eglapi.c:276 No locals. #5 eglSwapBuffers (dpy=0x623e00, surface=0x7b1900) at eglapi.c:686 ctx = 0x6641c0 surf = 0xffffffffffffffff drv = 0xfffffffffffffe00 ret = <optimized out> __FUNCTION__ = "eglSwapBuffers" #6 0x00007ffff31fef2c in QWaylandGLContext::swapBuffers (this=0x663ab0, surface=0x7c7240) at qwaylandglcontext.cpp:180 window = 0x7c7240 eglSurface = 0x7b1900 __PRETTY_FUNCTION__ = "virtual void QWaylandGLContext::swapBuffers(QPlatformSurface*)" #7 0x00007ffff77ee6db in QOpenGLContext::swapBuffers (this=0x663270, surface=0x7b1c30) at kernel/qopenglcontext.cpp:610 d = 0x663fa0 __PRETTY_FUNCTION__ = "void QOpenGLContext::swapBuffers(QSurface*)" surfaceHandle = 0x7c7240 #8 0x00000000004045ae in Renderer::render (this=0x66bda0, surface=0x7b1c30, color=..., viewSize=...) at hellowindow.cpp:146 modelview = {m = {{0.955632567, 0.234735787, -0.177948058, 0}, {-0.177948058, 0.941473782, 0.286289334, 0}, {0.234735787, -0.241921902, 0.941473782, 0}, {0.035589613, -0.188294753, -0.0572578683, 1}}, flagBits = 13} #9 0x0000000000408f27 in Renderer::qt_static_metacall (_o=0x66bda0, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0x7fffffffd710) at .moc/debug-shared/moc_hellowindow.cpp:72 _t = 0x66bda0 #10 0x00007ffff7239230 in QMetaObject::activate (sender=0x7b1c20, signalOffset=18, local_signal_index=0, argv=0x7fffffffd710) at kernel/qobject.cpp:3441 receiverInSameThread = true sw = {receiver = 0x66bda0, previousSender = 0x0, currentSender = {sender = 0x7b1c20, signal = 18, ref = 1}, switched = true} callFunction = 0x408ecc <Renderer::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)> receiver = 0x66bda0 method_relative = 0 c = 0x708f40 last = 0x708f40 locker = {val = 140737344423920} connectionLists = {connectionLists = 0x738940} list = 0x7b5aa8 signal_index = 18 empty_argv = {0x0} currentThreadId = 0x7ffff7fcd740 __PRETTY_FUNCTION__ = "static void QMetaObject::activate(QObject*, int, int, void**)" #11 0x00007ffff7238b92 in QMetaObject::activate (sender=0x7b1c20, m=0x60cb40, local_signal_index=0, argv=0x7fffffffd710) at kernel/qobject.cpp:3316 No locals. #12 0x000000000040929d in HelloWindow::needRender (this=0x7b1c20, _t1=0x7b1c30, _t2=..., _t3=...) at .moc/debug-shared/moc_hellowindow.cpp:227 _a = {0x0, 0x7fffffffd700, 0x7b1c4c, 0x7fffffffd750} #13 0x00000000004042fb in HelloWindow::render (this=0x7b1c20) at hellowindow.cpp:96 No locals. #14 0x00000000004090ba in HelloWindow::qt_static_metacall (_o=0x7b1c20, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0x7fffffffd850) at .moc/debug-shared/moc_hellowindow.cpp:172 _t = 0x7b1c20 #15 0x00007ffff7239230 in QMetaObject::activate (sender=0x95dd00, signalOffset=3, local_signal_index=0, argv=0x0) at kernel/qobject.cpp:3441 receiverInSameThread = true sw = {receiver = 0x7b1c20, previousSender = 0x0, currentSender = {sender = 0x95dd00, signal = 3, ref = 1}, switched = true} callFunction = 0x409046 <HelloWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)> receiver = 0x7b1c20 method_relative = 1 c = 0xae7f30 last = 0xae7f30 locker = {val = 140737344423928} connectionLists = {connectionLists = 0xb692f0} list = 0xb153c8 signal_index = 3 empty_argv = {0x0} currentThreadId = 0x7ffff7fcd740 __PRETTY_FUNCTION__ = "static void QMetaObject::activate(QObject*, int, int, void**)" #16 0x00007ffff7238b92 in QMetaObject::activate (sender=0x95dd00, m=0x7ffff76a2740, local_signal_index=0, argv=0x0) at kernel/qobject.cpp:3316 No locals. #17 0x00007ffff72c4285 in QTimer::timeout (this=0x95dd00) at .moc/debug-shared/moc_qtimer.cpp:189 No locals. #18 0x00007ffff7243ea9 in QTimer::timerEvent (this=0x95dd00, e=0x7fffffffdce0) at kernel/qtimer.cpp:250 No locals. #19 0x00007ffff7232a66 in QObject::event (this=0x95dd00, e=0x7fffffffdce0) at kernel/qobject.cpp:1051 No locals. #20 0x00007ffff71f914e in QCoreApplicationPrivate::notify_helper (this=0x60e810, receiver=0x95dd00, event=0x7fffffffdce0) at kernel/qcoreapplication.cpp:924 No locals. #21 0x00007ffff71f8e42 in QCoreApplication::notify (this=0x7fffffffe0f0, receiver=0x95dd00, event=0x7fffffffdce0) at kernel/qcoreapplication.cpp:869 d = 0x60e810 __PRETTY_FUNCTION__ = "virtual bool QCoreApplication::notify(QObject*, QEvent*)" #22 0x00007ffff77aef38 in QGuiApplication::notify (this=0x7fffffffe0f0, object=0x95dd00, event=0x7fffffffdce0) at kernel/qguiapplication.cpp:1213 No locals. #23 0x00007ffff71f8d4e in QCoreApplication::notifyInternal (this=0x7fffffffe0f0, receiver=0x95dd00, event=0x7fffffffdce0) at kernel/qcoreapplication.cpp:807 threadData = 0x60e250 loopLevelCounter = {threadData = 0x60e250} result = false cbdata = {0x95dd00, 0x7fffffffdce0, 0x7fffffffdc7f} d = 0xb133e0 #24 0x00007ffff71fc85f in QCoreApplication::sendEvent (receiver=0x95dd00, event=0x7fffffffdce0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:201 No locals. #25 0x00007ffff726874e in QTimerInfoList::activateTimers (this=0x61cb60) at kernel/qtimerinfo_unix.cpp:644 e = {<QEvent> = {_vptr.QEvent = 0x7ffff769eb50, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff76b8dc0, data = 0x7ffff73c4900, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}, d = 0x0, t = 1, posted = 0, spont = 0, m_accept = 1, reserved = 8191}, id = 1} currentTimerInfo = 0xb6b200 n_act = 2 maxCount = 1 currentTime = {tv_sec = 167798, tv_nsec = 904675833} #26 0x00007ffff72698ed in timerSourceDispatch (source=0x61cb00) at kernel/qeventdispatcher_glib.cpp:185 timerSource = 0x61cb00 #27 0x00007ffff72699d4 in idleTimerSourceDispatch (source=0x61dc00) at kernel/qeventdispatcher_glib.cpp:232 timerSource = 0x61cb00 #28 0x00007ffff4f39a93 in g_main_dispatch (context=0x61c410) at gmain.c:2784 dispatch = 0x7ffff726999e <idleTimerSourceDispatch(GSource*, GSourceFunc, gpointer)> was_in_call = 0 user_data = 0x0 callback = 0 cb_funcs = 0x0 cb_data = 0x0 current_source_link = {data = 0x61dc00, next = 0x0} need_destroy = <optimized out> source = 0x61dc00 current = 0x61c5b0 i = <optimized out> #29 g_main_context_dispatch (context=0x61c410) at gmain.c:3288 No locals. #30 0x00007ffff4f39dd8 in g_main_context_iterate (dispatch=1, block=<optimized out>, context=0x61c410, self=<optimized out>) at gmain.c:3359 timeout = 0 some_ready = 1 fds = <optimized out> max_priority = 200 nfds = 3 allocated_nfds = <optimized out> #31 g_main_context_iterate (context=0x61c410, block=<optimized out>, dispatch=1, self=<optimized out>) at gmain.c:3296 some_ready = 1 #32 0x00007ffff4f39e94 in g_main_context_iteration (context=0x61c410, may_block=1) at gmain.c:3420 retval = <optimized out> #33 0x00007ffff726a313 in QEventDispatcherGlib::processEvents (this=0x611fc0, flags=...) at kernel/qeventdispatcher_glib.cpp:423 d = 0x6132b0 canWait = true savedFlags = {i = 0} result = false #34 0x00007ffff321c92a in QPAEventDispatcherGlib::processEvents (this=0x611fc0, flags=...) at eventdispatchers/qeventdispatcher_glib.cpp:123 No locals. #35 0x00007ffff71f5a4b in QEventLoop::processEvents (this=0x7fffffffe070, flags=...) at kernel/qeventloop.cpp:136 d = 0xcfd840 #36 0x00007ffff71f5d19 in QEventLoop::exec (this=0x7fffffffe070, flags=...) at kernel/qeventloop.cpp:212 locker = {val = 6351264} __PRETTY_FUNCTION__ = "int QEventLoop::exec(QEventLoop::ProcessEventsFlags)" ref = {d = 0xcfd840, locker = @0x7fffffffdfd0, exceptionCaught = true} app = 0x7fffffffe0f0 d = 0xcfd840 #37 0x00007ffff71f93da in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1060 threadData = 0x60e250 __PRETTY_FUNCTION__ = "static int QCoreApplication::exec()" eventLoop = {<QObject> = {_vptr.QObject = 0x7ffff76a23f0, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff76a80c0, data = 0x7ffff7372c80, static_metacall = 0x7ffff723b79e <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0xcfd840}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff76a8c20, data = 0x7ffff73beee0, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff769eca0, stringdata = 0x7ffff76b8c00, data = 0x7ffff73c4700, static_metacall = 0x7ffff72c35e4 <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}} returnCode = 0 #38 0x00007ffff77aee60 in QGuiApplication::exec () at kernel/qguiapplication.cpp:1192 No locals. #39 0x00000000004076be in main (argc=1, argv=0x7fffffffe4b8) at main.cpp:128 screenGeometry = {x1 = 0, y1 = 0, x2 = 1023, y2 = 639} delta = 40 windows = {{p = {static shared_null = {ref = {atomic = {_q_value = -1}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0xc111b0}, d = 0xc111b0}} windowA = 0x7b1c20 renderThreads = {{p = {static shared_null = {ref = {atomic = {_q_value = -1}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x9e8e60}, d = 0x9e8e60}} exitValue = 0 app = {<QCoreApplication> = {<QObject> = {_vptr.QObject = 0x7ffff7dc0630, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff76a80c0, data = 0x7ffff7372c80, static_metacall = 0x7ffff723b79e <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x60e810}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff76a8c20, data = 0x7ffff73beee0, static_metacall = 0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x7ffff769eca0, stringdata = 0x7ffff76b8c60, data = 0x7ffff73c4800, static_metacall = 0x7ffff72c373c <QCoreApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, static self = 0x7fffffffe0f0}, static staticMetaObject = {d = {superdata = 0x7ffff76a2480, stringdata = 0x7ffff7dcbf00, data = 0x7ffff7ab8c60, static_metacall = 0x7ffff77b443c <QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}} multipleWindows = true screen = 0x6559c0 center = {xp = 511, yp = 80} windowSize = {wd = 400, ht = 320} rendererA = {value = 0x66bda0, d = 0x7746a0} format = {d = 0x663e70}