diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2019-10-30 08:59:49 +0100 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2019-10-31 11:17:00 +0000 |
commit | 62e959eaa707a163daca69a42c733bbd272d41d6 (patch) | |
tree | 3f1b7e857afb99d0549b4243345589ec1fd8a18d | |
parent | 37cb6f0f35030420c7d37a126f817cac73aeed97 (diff) | |
download | qtwayland-62e959eaa707a163daca69a42c733bbd272d41d6.tar.gz |
Client tests: Fix flaky deadlock
Sometimes the test would wait indefinitely in the compositor constructor, while
also waiting in the compositor thread for m_ready to become true.
m_ready is set to true in applicationInitialized(), which is supposed to be
called from the client thread after QGuiApplication has been created (and also
after the MockCompositor constructor has returned).
I.e. the problem is that the wake in MockCompositor::run may sometimes
happen before the MockCompositor::MockCompositor starts waiting.
Move the wake inside the pre-initialized compositor loop. Essentially waking
every 20 ms until the application is initialized.
Fixes: QTBUG-66570
Change-Id: Ia5eba5d08ce4d1d3eeca99eae6cfa7d9d4fd5a0b
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
-rw-r--r-- | tests/auto/client/shared_old/mockcompositor.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/tests/auto/client/shared_old/mockcompositor.cpp b/tests/auto/client/shared_old/mockcompositor.cpp index 0dfaef5e..96dc059e 100644 --- a/tests/auto/client/shared_old/mockcompositor.cpp +++ b/tests/auto/client/shared_old/mockcompositor.cpp @@ -312,9 +312,9 @@ void *MockCompositor::run(void *data) Impl::Compositor compositor(controller); controller->m_compositor = &compositor; - controller->m_waitCondition.wakeOne(); while (!controller->m_ready) { + controller->m_waitCondition.wakeOne(); controller->dispatchCommands(); compositor.dispatchEvents(20); } |