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, mir::protobuf::DisplayServer, mir::protobuf::SurfaceParameters, mir::protobuf::Surface>(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::read_op<boost::asio::basic_stream_socket<boost::asio::local::stream_protocol, boost::asio::stream_socket_service<boost::asio::local::stream_protocol> >, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_exactly_t, std::function<void (boost::system::error_code const&, unsigned int)> > >::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?)
We had to pull this, unfortunately there's a seldom, but still, deadlock when using this approach:
Thread 9 (Thread 0xaebff450 (LWP 15260)): linux-gnueabihf /libpthread. so.0 cond_wait@ @GLIBC_ 2.4 () from /lib/arm- linux-gnueabihf /libpthread. so.0 :wait(QMutex* , unsigned long) () arm-linux- gnueabihf/ libQt5Core. so.5 :acquire( int) () from /usr/lib/ arm-linux- gnueabihf/ libQt5Core. so.5 :activate( QObject* , int, int, void**) () arm-linux- gnueabihf/ libQt5Core. so.5 ategy:: sessionAboutToC reateSurface( mir::scene: :Session const&, QSize&) () arm-linux- gnueabihf/ qt5/plugins/ platforms/ libqpa- mirserver. so ategy:: place(mir: :scene: :Session const&, mir::scene: :SurfaceCreatio nParameters const&) () from /usr/lib/ arm-linux- gnueabihf/ qt5/plugins/ platforms/ libqpa- mirserver. so :SurfaceControl ler::add_ surface( mir::scene: :SurfaceCreatio nParameters const&, mir::scene: :Session* ) () from /usr/lib/ arm-linux- gnueabihf/ libmirserver. so.24 :ApplicationSes sion::create_ surface( mir::scene: :SurfaceCreatio nParameters const&) arm-linux- gnueabihf/ libmirserver. so.24 :SessionMediato r::create_ surface( google: :protobuf: :RpcController* , mir::protobuf: :SurfaceParamet ers const*, mir::protobuf: :Surface* , google: :protobuf: :Closure* ) () arm-linux- gnueabihf/ libmirserver. so.24 :detail: :invoke< mir::frontend: :detail: :ProtobufMessag eProcessor, mir::frontend: :detail: :DisplayServer, mir::protobuf: :DisplayServer, mir::protobuf: :SurfaceParamet ers, mir::protobuf: :Surface> (mir::frontend: :detail: :ProtobufMessag eProcessor* , mir::frontend: :detail: :DisplayServer* , void (mir::protobuf: :DisplayServer: :*)(google: :protobuf: :RpcController* , mir::protobuf: :SurfaceParamet ers const*, mir::protobuf: :Surface* , google: :protobuf: :Closure* ), mir::frontend: :detail: :Invocation const&) () arm-linux- gnueabihf/ libmirserver. so.24 :detail: :ProtobufMessag eProcessor: :dispatch( mir::frontend: :detail: :Invocation const&) () from /usr/lib/ arm-linux- gnueabihf/ libmirserver. so.24 :detail: :SocketConnecti on::on_ new_message( boost:: system: :error_ code const&) () arm-linux- gnueabihf/ libmirserver. so.24 :detail: :SocketConnecti on::on_ read_size( boost:: system: :error_ code const&) () arm-linux- gnueabihf/ libmirserver. so.24 asio::detail: :reactive_ socket_ recv_op< boost:: asio::mutable_ buffers_ 1, boost:: asio::detail: :read_op< boost:: asio::basic_ stream_ socket< boost:: asio::local: :stream_ protocol, boost:: asio::stream_ socket_ service< boost:: asio::local: :stream_ protocol> >, boost:: asio::mutable_ buffers_ 1, boost:: asio::detail: :transfer_ exactly_ t, std::function<void (boost: :system: :error_ code const&, unsigned int)> > >::do_complete( boost:: asio::detail: :task_io_ service* , boost:: asio::detail: :task_io_ service_ operation* , boost:: system: :error_ code const&, unsigned int) arm-linux- gnueabihf/ libmirserver. so.24 asio::detail: :task_io_ service: :run(boost: :system: :error_ code&) () arm-linux- gnueabihf/ libmirserver. so.24 arm-linux- gnueabihf/ libmirserver. so.24 arm-linux- gnueabihf/ libstdc+ +.so.6 linux-gnueabihf /libpthread. so.0 linux-gnueabihf /libc.so. 6
#0 0xb603f554 in __libc_do_syscall () from /lib/arm-
#1 0xb603b192 in pthread_
#2 0xb63b3794 in QWaitCondition:
from /usr/lib/
#3 0xb63aed2e in QSemaphore:
#4 0xb6525436 in QMetaObject:
from /usr/lib/
#5 0xb4001384 in MirPlacementStr
from /usr/lib/
#6 0xb3ff239e in MirPlacementStr
#7 0xb3e96f3e in mir::scene:
#8 0xb3e81646 in mir::scene:
() from /usr/lib/
#9 0xb3eb2a5c in mir::frontend:
from /usr/lib/
#10 0xb3eb6228 in void mir::frontend:
from /usr/lib/
#11 0xb3eb4f6a in mir::frontend:
#12 0xb3ebb44c in mir::frontend:
from /usr/lib/
#13 0xb3ebb732 in mir::frontend:
from /usr/lib/
#14 0xb3ebd75a in boost::
() from /usr/lib/
#15 0xb3e697c6 in boost::
from /usr/lib/
#16 0xb3eb861c in ?? () from /usr/lib/
#17 0xb630c360 in ?? () from /usr/lib/
#18 0xb6037f98 in start_thread () from /lib/arm-
#19 0xb61fe7cc in ?? () from /lib/arm-
Backtrace stopped: previous frame identical to this frame (corrupt stack?)