![]() |
VOOZH | about |
| Affects | Status | Importance | Assigned to | Milestone | |
|---|---|---|---|---|---|
| Mir |
Fix Released
|
Critical
|
Alberto Aguirre | ||
| mir (Ubuntu) |
Fix Released
|
Critical
|
Unassigned | ||
helgrind: Lock order violated (potential deadlock) in mir::scene::SurfaceStack::emit_change_notification() vs mir::compositor::MultiThreadedCompositor::schedule_compositing()
==19841== ----------------------------------------------------------------
==19841==
==19841== Thread #4: lock order "0xA9FF380 before 0xA9FF108" violated
==19841==
==19841== Observed (incorrect) order is: acquisition of lock at 0xA9FF108
==19841== at 0x4C30795: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==19841== by 0x8F6481: __gthread_mutex_lock(pthread_mutex_t*) (gthr-default.h:748)
==19841== by 0x8F7F67: std::mutex::lock() (mutex:134)
==19841== by 0x9EA695: std::lock_guard<std::mutex>::lock_guard(std::mutex&) (mutex:414)
==19841== by 0x5445AD6: mir::scene::SurfaceStack::emit_change_notification() (surface_stack.cpp:160)
==19841== by 0x54456A4: mir::scene::SurfaceStack::add_surface(std::shared_ptr<mir::scene::Surface> const&, mir::IntWrapper<mir::scene::detail::DepthIdIdTag, int>, mir::input::InputReceptionMode) (surface_stack.cpp:112)
==19841== by 0x54457AF: mir::scene::SurfaceStack::create_surface(mir::IntWrapper<mir::frontend::detail::SessionsSurfaceIdTag, int>, mir::shell::SurfaceCreationParameters const&, std::shared_ptr<mir::frontend::EventSink> const&, std::shared_ptr<mir::shell::SurfaceConfigurator> const&) (surface_stack.cpp:123)
==19841== by 0x5449F0B: mir::scene::SurfaceController::create_surface(mir::IntWrapper<mir::frontend::detail::SessionsSurfaceIdTag, int>, mir::shell::SurfaceCreationParameters const&, std::shared_ptr<mir::frontend::EventSink> const&, std::shared_ptr<mir::shell::SurfaceConfigurator> const&) (surface_controller.cpp:36)
==19841== by 0x544A405: mir::scene::SurfaceSource::create_surface(mir::shell::Session*, mir::shell::SurfaceCreationParameters const&, mir::IntWrapper<mir::frontend::detail::SessionsSurfaceIdTag, int>, std::shared_ptr<mir::frontend::EventSink> const&) (surface_source.cpp:46)
==19841== by 0x5474703: mir::shell::OrganisingSurfaceFactory::create_surface(mir::shell::Session*, mir::shell::SurfaceCreationParameters const&, mir::IntWrapper<mir::frontend::detail::SessionsSurfaceIdTag, int>, std::shared_ptr<mir::frontend::EventSink> const&) (organising_surface_factory.cpp:45)
==19841== by 0x5421602: mir::scene::ApplicationSession::create_surface(mir::shell::SurfaceCreationParameters const&) (application_session.cpp:73)
==19841== by 0x53B1314: mir::frontend::SessionMediator::create_surface(google::protobuf::RpcController*, mir::protobuf::SurfaceParameters const*, mir::protobuf::Surface*, google::protobuf::Closure*) (session_mediator.cpp:169)
==19841==
==19841== followed by a later acquisition of lock at 0xA9FF380
==19841== at 0x4C30795: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==19841== by 0x8F6481: __gthread_mutex_lock(pthread_mutex_t*) (gthr-default.h:748)
==19841== by 0x8F7F67: std::mutex::lock() (mutex:134)
==19841== by 0x8F8328: std::unique_lock<std::mutex>::lock() (mutex:511)
==19841== by 0x8F8110: std::unique_lock<std::mutex>::unique_lock(std::mutex&) (mutex:443)
==19841== by 0x539A2C1: mir::compositor::MultiThreadedCompositor::schedule_compositing() (multi_threaded_compositor.cpp:168)
==19841== by 0x539A4B6: mir::compositor::MultiThreadedCompositor::start()::{lambda()#2}::operator()() const (multi_threaded_compositor.cpp:197)
==19841== by 0x539AC73: std::_Function_handler<void (), mir::compositor::MultiThreadedCompositor::start()::{lambda()#2}>::_M_invoke(std::_Any_data const&) (functional:2071)
==19841== by 0x95EB71: std::function<void ()>::operator()() const (functional:2464)
==19841== by 0x5445AE8: mir::scene::SurfaceStack::emit_change_notification() (surface_stack.cpp:161)
==19841== by 0x54456A4: mir::scene::SurfaceStack::add_surface(std::shared_ptr<mir::scene::Surface> const&, mir::IntWrapper<mir::scene::detail::DepthIdIdTag, int>, mir::input::InputReceptionMode) (surface_stack.cpp:112)
==19841== by 0x54457AF: mir::scene::SurfaceStack::create_surface(mir::IntWrapper<mir::frontend::detail::SessionsSurfaceIdTag, int>, mir::shell::SurfaceCreationParameters const&, std::shared_ptr<mir::frontend::EventSink> const&, std::shared_ptr<mir::shell::SurfaceConfigurator> const&) (surface_stack.cpp:123)
==19841==
==19841== Required order was established by acquisition of lock at 0xA9FF380
==19841== at 0x4C30795: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==19841== by 0x8F6481: __gthread_mutex_lock(pthread_mutex_t*) (gthr-default.h:748)
==19841== by 0x8F7F67: std::mutex::lock() (mutex:134)
==19841== by 0x8F8328: std::unique_lock<std::mutex>::lock() (mutex:511)
==19841== by 0x8F8110: std::unique_lock<std::mutex>::unique_lock(std::mutex&) (mutex:443)
==19841== by 0x539A4EE: mir::compositor::MultiThreadedCompositor::start() (multi_threaded_compositor.cpp:176)
==19841== by 0x5359A1B: mir::DisplayServer::run() (display_server.cpp:208)
==19841== by 0x5350353: mir::run_mir(mir::ServerConfiguration&, std::function<void (mir::DisplayServer&)>) (run_mir.cpp:90)
==19841== by 0x9E06B1: mir_test_framework::TestingProcessManager::launch_server_process(mir_test_framework::TestingServerConfiguration&) (testing_process_manager.cpp:64)
==19841== by 0x9DD292: mir_test_framework::BespokeDisplayServerTestFixture::launch_server_process(mir_test_framework::TestingServerConfiguration&) (display_server_test_fixture.cpp:60)
==19841== by 0x9B0F7B: TestClientInput_clients_receive_key_input_Test::TestBody() (test_client_input.cpp:215)
==19841== by 0xB1BE9B: void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in /home/dan/bzr/mir/toy/build/bin/mir_acceptance_tests)
==19841==
==19841== followed by a later acquisition of lock at 0xA9FF108
==19841== at 0x4C30795: pthread_mutex_lock (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==19841== by 0x8F6481: __gthread_mutex_lock(pthread_mutex_t*) (gthr-default.h:748)
==19841== by 0x8F7F67: std::mutex::lock() (mutex:134)
==19841== by 0x9EA695: std::lock_guard<std::mutex>::lock_guard(std::mutex&) (mutex:414)
==19841== by 0x54454D8: mir::scene::SurfaceStack::set_change_callback(std::function<void ()> const&) (surface_stack.cpp:96)
==19841== by 0x539A5A8: mir::compositor::MultiThreadedCompositor::start() (multi_threaded_compositor.cpp:198)
==19841== by 0x5359A1B: mir::DisplayServer::run() (display_server.cpp:208)
==19841== by 0x5350353: mir::run_mir(mir::ServerConfiguration&, std::function<void (mir::DisplayServer&)>) (run_mir.cpp:90)
==19841== by 0x9E06B1: mir_test_framework::TestingProcessManager::launch_server_process(mir_test_framework::TestingServerConfiguration&) (testing_process_manager.cpp:64)
==19841== by 0x9DD292: mir_test_framework::BespokeDisplayServerTestFixture::launch_server_process(mir_test_framework::TestingServerConfiguration&) (display_server_test_fixture.cpp:60)
==19841== by 0x9B0F7B: TestClientInput_clients_receive_key_input_Test::TestBody() (test_client_input.cpp:215)
==19841== by 0xB1BE9B: void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in /home/dan/bzr/mir/toy/build/bin/mir_acceptance_tests)
==19841==
| Changed in mir: | |
| milestone: | 0.1.8 β 0.1.9 |
| Changed in mir: | |
| assignee: | nobody β Alberto Aguirre (albaguirre) |
| status: | Triaged β In Progress |
| Changed in mir: | |
| status: | Fix Committed β Fix Released |
| Changed in mir (Ubuntu): | |
| importance: | Undecided β Critical |
| status: | New β Triaged |
Bug watches keep track of this bug in other bug trackers.