helgrind: Lock order violated (potential for deadlock) in boost::asio::io_service::run()
==21450== ----------------------------------------------------------------
==21450==
==21450== Thread #1: lock order "0x5735520 before 0xA87DD98" violated
==21450==
==21450== Observed (incorrect) order is: acquisition of lock at 0xA87DD98
==21450== at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==21450== by 0x52E6A6F: boost::asio::detail::posix_mutex::lock() (posix_mutex.hpp:52)
==21450== by 0x52EC53F: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
==21450== by 0x52E8B97: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:611)
==21450== by 0x52E8CFA: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (epoll_reactor.ipp:648)
==21450== by 0x52E6E6B: boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) (task_io_service_operation.hpp:37)
==21450== by 0x52E992C: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:412)
==21450== by 0x52E9383: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
==21450== by 0x52E9C8E: boost::asio::io_service::run() (io_service.ipp:59)
==21450== by 0x52E5DDD: mir::AsioMainLoop::run() (asio_main_loop.cpp:121)
==21450== by 0x52889DC: mir::DisplayServer::run() (display_server.cpp:210)
==21450== by 0x527EFF5: mir::run_mir(mir::ServerConfiguration&, std::function<void (mir::DisplayServer&)>) (run_mir.cpp:80)
==21450==
==21450== followed by a later acquisition of lock at 0x5735520
==21450== at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==21450== by 0x52EA51D: boost::asio::detail::posix_static_mutex::lock() (posix_static_mutex.hpp:44)
==21450== by 0x52ED2FF: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
==21450== by 0x52EB219: boost::asio::detail::signal_set_service::deliver_signal(int) (signal_set_service.ipp:431)
==21450== by 0x52EA5FB: boost::asio::detail::signal_set_service::pipe_read_op::do_perform(boost::asio::detail::reactor_op*) (signal_set_service.ipp:95)
==21450== by 0x52E6FD4: boost::asio::detail::reactor_op::perform() (reactor_op.hpp:40)
==21450== by 0x52E8BF3: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:622)
==21450== by 0x52E8CFA: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (epoll_reactor.ipp:648)
==21450== by 0x52E6E6B: boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) (task_io_service_operation.hpp:37)
==21450== by 0x52E992C: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:412)
==21450== by 0x52E9383: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
==21450== by 0x52E9C8E: boost::asio::io_service::run() (io_service.ipp:59)
==21450==
==21450== Required order was established by acquisition of lock at 0x5735520
==21450== at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==21450== by 0x52EA51D: boost::asio::detail::posix_static_mutex::lock() (posix_static_mutex.hpp:44)
==21450== by 0x52ED2FF: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
==21450== by 0x52EB38A: boost::asio::detail::signal_set_service::add_service(boost::asio::detail::signal_set_service*) (signal_set_service.ipp:467)
==21450== by 0x52EA731: boost::asio::detail::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.ipp:128)
==21450== by 0x52EB8C4: boost::asio::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.hpp:53)
==21450== by 0x52F1C5E: boost::asio::io_service::service* boost::asio::detail::service_registry::create<boost::asio::signal_set_service>(boost::asio::io_service&) (service_registry.hpp:81)
==21450== by 0x52E6D07: boost::asio::detail::service_registry::do_use_service(boost::asio::io_service::service::key const&, boost::asio::io_service::service* (*)(boost::asio::io_service&)) (service_registry.ipp:123)
==21450== by 0x52F130B: boost::asio::signal_set_service& boost::asio::detail::service_registry::use_service<boost::asio::signal_set_service>() (service_registry.hpp:48)
==21450== by 0x52F06E6: boost::asio::signal_set_service& boost::asio::use_service<boost::asio::signal_set_service>(boost::asio::io_service&) (io_service.hpp:33)
==21450== by 0x52EEBB5: boost::asio::basic_io_object<boost::asio::signal_set_service, false>::basic_io_object(boost::asio::io_service&) (basic_io_object.hpp:90)
==21450== by 0x52ED4DA: boost::asio::basic_signal_set<boost::asio::signal_set_service>::basic_signal_set(boost::asio::io_service&) (basic_signal_set.hpp:106)
==21450==
==21450== followed by a later acquisition of lock at 0xA87DD98
==21450== at 0x4C2FC35: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==21450== by 0x52E6A6F: boost::asio::detail::posix_mutex::lock() (posix_mutex.hpp:52)
==21450== by 0x52EC53F: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
==21450== by 0x52E7C69: boost::asio::detail::epoll_reactor::register_internal_descriptor(int, int, boost::asio::detail::epoll_reactor::descriptor_state*&, boost::asio::detail::reactor_op*) (epoll_reactor.ipp:179)
==21450== by 0x52EB426: boost::asio::detail::signal_set_service::add_service(boost::asio::detail::signal_set_service*) (signal_set_service.ipp:485)
==21450== by 0x52EA731: boost::asio::detail::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.ipp:128)
==21450== by 0x52EB8C4: boost::asio::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.hpp:53)
==21450== by 0x52F1C5E: boost::asio::io_service::service* boost::asio::detail::service_registry::create<boost::asio::signal_set_service>(boost::asio::io_service&) (service_registry.hpp:81)
==21450== by 0x52E6D07: boost::asio::detail::service_registry::do_use_service(boost::asio::io_service::service::key const&, boost::asio::io_service::service* (*)(boost::asio::io_service&)) (service_registry.ipp:123)
==21450== by 0x52F130B: boost::asio::signal_set_service& boost::asio::detail::service_registry::use_service<boost::asio::signal_set_service>() (service_registry.hpp:48)
==21450== by 0x52F06E6: boost::asio::signal_set_service& boost::asio::use_service<boost::asio::signal_set_service>(boost::asio::io_service&) (io_service.hpp:33)
==21450== by 0x52EEBB5: boost::asio::basic_io_object<boost::asio::signal_set_service, false>::basic_io_object(boost::asio::io_service&) (basic_io_object.hpp:90)
==21450==
==21450== ----------------------------------------------------------------
so is this really a bug on mir or aiso ?