Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-28979

[Wayland] Threaded OpenGL support disabled for wayland-egl

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P2: Important
    • 5.1.0
    • 5.0.0
    • QPA: Wayland
    • 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.

      affectors.backtrace
      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:

      hellowindow.backtrace
      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}
      

      Attachments

        1. AffectorsOutput.txt
          7 kB
        2. flush.patch
          0.5 kB
        3. WestonOutput.txt
          136 kB
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            janichol Andy Nichols
            janichol Andy Nichols
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes