We had to pull this, unfortunately there's a seldom, but still, deadlock when using this approach: Thread 9 (Thread 0xaebff450 (LWP 15260)): #0 0xb603f554 in __libc_do_syscall () from /lib/arm-linux-gnueabihf/libpthread.so.0 #1 0xb603b192 in pthread_cond_wait@@GLIBC_2.4 () from /lib/arm-linux-gnueabihf/libpthread.so.0 #2 0xb63b3794 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5 #3 0xb63aed2e in QSemaphore::acquire(int) () from /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5 #4 0xb6525436 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5 #5 0xb4001384 in MirPlacementStrategy::sessionAboutToCreateSurface(mir::scene::Session const&, QSize&) () from /usr/lib/arm-linux-gnueabihf/qt5/plugins/platforms/libqpa-mirserver.so #6 0xb3ff239e in MirPlacementStrategy::place(mir::scene::Session const&, mir::scene::SurfaceCreationParameters const&) () from /usr/lib/arm-linux-gnueabihf/qt5/plugins/platforms/libqpa-mirserver.so #7 0xb3e96f3e in mir::scene::SurfaceController::add_surface(mir::scene::SurfaceCreationParameters const&, mir::scene::Session*) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #8 0xb3e81646 in mir::scene::ApplicationSession::create_surface(mir::scene::SurfaceCreationParameters const&) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #9 0xb3eb2a5c in mir::frontend::SessionMediator::create_surface(google::protobuf::RpcController*, mir::protobuf::SurfaceParameters const*, mir::protobuf::Surface*, google::protobuf::Closure*) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #10 0xb3eb6228 in void mir::frontend::detail::invoke(mir::frontend::detail::ProtobufMessageProcessor*, mir::frontend::detail::DisplayServer*, void (mir::protobuf::DisplayServer::*)(google::protobuf::RpcController*, mir::protobuf::SurfaceParameters const*, mir::protobuf::Surface*, google::protobuf::Closure*), mir::frontend::detail::Invocation const&) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #11 0xb3eb4f6a in mir::frontend::detail::ProtobufMessageProcessor::dispatch(mir::frontend::detail::Invocation const&) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #12 0xb3ebb44c in mir::frontend::detail::SocketConnection::on_new_message(boost::system::error_code const&) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #13 0xb3ebb732 in mir::frontend::detail::SocketConnection::on_read_size(boost::system::error_code const&) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #14 0xb3ebd75a in boost::asio::detail::reactive_socket_recv_op >, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_exactly_t, std::function > >::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned int) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #15 0xb3e697c6 in boost::asio::detail::task_io_service::run(boost::system::error_code&) () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #16 0xb3eb861c in ?? () from /usr/lib/arm-linux-gnueabihf/libmirserver.so.24 #17 0xb630c360 in ?? () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 #18 0xb6037f98 in start_thread () from /lib/arm-linux-gnueabihf/libpthread.so.0 #19 0xb61fe7cc in ?? () from /lib/arm-linux-gnueabihf/libc.so.6 Backtrace stopped: previous frame identical to this frame (corrupt stack?)