I can reproduce that with krillin here.. and on mx4 I sometimes get it to hang during shutdown..
hread 1 (Thread 0xb6f5e000 (LWP 21998)): #0 0xb6e59d44 in __libc_do_syscall () from /lib/arm-linux-gnueabihf/libpthread.so.0 No symbol table info available. #1 0xb6e556b0 in pthread_cond_wait@@GLIBC_2.4 () from /lib/arm-linux-gnueabihf/libpthread.so.0 No symbol table info available. #2 0xb6ee56e4 in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 No symbol table info available. #3 0xb69d18e2 in std::condition_variable::wait<std::__future_base::_State_baseV2::wait()::{lambda()#1}>(std::unique_lock<std::mutex>&, std::__future_base::_State_baseV2::wait()::{lambda()#1}) (this=0x1d2420, __lock=..., __p=...) ---Type <return> to continue, or q <return> to quit--- at /usr/arm-linux-gnueabihf/include/c++/4.9.3/condition_variable:98 No locals. #4 0xb69d0ec6 in std::__future_base::_State_baseV2::wait (this=0x1d2400) at /usr/arm-linux-gnueabihf/include/c++/4.9.3/future:323 __lock = {_M_device = 0x1d2408, _M_owns = true} #5 0xb69d26bc in std::__basic_future<void>::wait (this=0x1d9a78) at /usr/arm-linux-gnueabihf/include/c++/4.9.3/future:596 No locals. #6 0xb6a5c446 in mir::compositor::MultiThreadedCompositor::destroy_compositing_threads (this=0x1ce5f8) at /home/andreas/mir/load-all-platforms/src/server/compositor/multi_threaded_compositor.cpp:341 f = @0x1d9a78: {<std::__basic_future<void>> = {<std::__future_base> = {<No data fields>}, _M_state = std::shared_ptr (count 2, weak 0) 0x1d2400}, <No data fields>} __for_range = std::vector of length 1, capacity 1 = { {<std::__basic_future<void>> = {<std::__future_base> = {<No data fields>}, _M_state = std::shared_ptr (count 2, weak 0) 0x1d2400}, <No data fields>}} __for_begin = {<std::__basic_future<void>> = {<std::__future_base> = {<No data fields>}, _M_state = std::shared_ptr (count 2, weak 0) 0x1d2400}, <No data fields>} ---Type <return> to continue, or q <return> to quit--- __for_end = {<std::__basic_future<void>> = {<std::__future_base> = {<No data fields>}, _M_state = <error reading variable: Cannot access memory at address 0x15>}, <No data fields>} #7 0xb6a5c15e in mir::compositor::MultiThreadedCompositor::stop ( this=0x1ce5f8) at /home/andreas/mir/load-all-platforms/src/server/compositor/multi_threaded_compositor.cpp:307 started = mir::compositor::CompositorState::started cleanup_if_unwinding = {unwind = {__this = 0x1ce5f8}} #8 0xb6967c72 in mir::DisplayServer::run (this=0xbebc41e8) at /home/andreas/mir/load-all-platforms/src/server/display_server.cpp:206 server = @0x16aa50: {emergency_cleanup = std::shared_ptr (count 2, weak 2) 0x16a284, graphics_platform = std::shared_ptr (count 1, weak 1) 0x16df64, display = std::shared_ptr (count 6, weak 1) 0x16e074, input_dispatcher = std::shared_ptr (count 2, weak 1) 0x1b8410, compositor = std::shared_ptr (count 2, weak 1) 0x1ce5f8, connector = std::shared_ptr (count 1, weak 1) 0x1cee2c, prompt_connector = std::shared_ptr (count 1, weak 1) 0x1cf20c, input_manager = std::shared_ptr (count 1, weak 1) 0x1d1fac, main_loop = std::shared_ptr (count 7, weak 1) 0x16a2d0, server_status_listener = std::shared_ptr (count 1, weak 1) 0x1d99a4, ---Type <return> to continue, or q <return> to quit--- display_changer = std::shared_ptr (count 3, weak 1) 0x1ce990} #9 0xb6963cd2 in mir::run_mir(mir::ServerConfiguration&, std::function<void (mir::DisplayServer&)>, std::function<void (int)> const&) (config=..., init=..., terminator=...) at /home/andreas/mir/load-all-platforms/src/server/run_mir.cpp:110 server_ptr = 0xbebc41e8 main_loop = std::shared_ptr (count 7, weak 1) 0x16a2d0 fatal_error_strategy = {old_fatal_error_handler = 0xb67d9f31 <mir::fatal_error_except(char const*, ...)>} server = {p = {_M_b = {_M_p = 0x16aa50}}} concurrent_calls = {<std::__atomic_base<unsigned int>> = { _M_i = 1}, <No data fields>} raii = {deleter = {<No data fields>}, owner = true} #10 0xb698a732 in mir::Server::run (this=0xbebc4288) at /home/andreas/mir/load-all-platforms/src/server/server.cpp:404 emergency_cleanup = std::shared_ptr (count 2, weak 2) 0x16a284 #11 0xb6c7070a in main (argc=3, argv=0xbebc4454) at /home/andreas/mir/load-all-platforms/examples/server_example.cpp:108 context = { client_kill_action = std::unique_ptr<mir::time::Alarm> containing 0x1d4c80, server_stop_action = std::unique_ptr<mir::time::Alarm> containing 0x1d5270, test_failed = {<std::atomic_bool> = {_M_base = { ---Type <return> to continue, or q <return> to quit--- _M_i = false}}, <No data fields>}} screen_rotation_filter = std::shared_ptr (count 2, weak 0) 0x1597ec server = {self = std::shared_ptr (count 2, weak 0) 0x1584e4} quit_filter = std::shared_ptr (count 2, weak 1) 0x159574 printing_filter = std::shared_ptr (count 2, weak 0) 0x159adc #12 0x00010f26 in main (argc=3, argv=0xbebc4454) at /home/andreas/mir/load-all-platforms/examples/mir_demo_server_loader.cpp:40 so = 0x14b058 loaded_main = 0xb6c705f9 <main(int, char const**)>
I can reproduce that with krillin here.. and on mx4 I sometimes get it to hang during shutdown..
hread 1 (Thread 0xb6f5e000 (LWP 21998)): linux-gnueabihf /libpthread. so.0 cond_wait@ @GLIBC_ 2.4 () linux-gnueabihf /libpthread. so.0 variable: :wait(std: :unique_ lock<std: :mutex> &) arm-linux- gnueabihf/ libstdc+ +.so.6 variable: :wait<std: :__future_ base::_ State_baseV2: :wait() ::{lambda( )#1}>(std: :unique_ lock<std: :mutex> &, std::__ future_ base::_ State_baseV2: :wait() ::{lambda( )#1}) (this=0x1d2420, __lock=..., __p=...) linux-gnueabihf /include/ c++/4.9. 3/condition_ variable: 98 future_ base::_ State_baseV2: :wait (this=0x1d2400) linux-gnueabihf /include/ c++/4.9. 3/future: 323 basic_future< void>:: wait (this=0x1d9a78) linux-gnueabihf /include/ c++/4.9. 3/future: 596 ::MultiThreaded Compositor: :destroy_ compositing_ threads (this=0x1ce5f8) mir/load- all-platforms/ src/server/ compositor/ multi_threaded_ compositor. cpp:341 __basic_ future< void>> = {<std:: __future_ base> = {<No data fields>},
_M_ state = std::shared_ptr (count 2, weak 0) 0x1d2400}, <No data fields>}
{<std: :__basic_ future< void>> = {<std:: __future_ base> = {<No data fields>}, _M_state = std::shared_ptr (count 2, weak 0) 0x1d2400}, <No data fields>}} __basic_ future< void>> = {<std:: __future_ base> = {<No data fields>},
_M_ state = std::shared_ptr (count 2, weak 0) 0x1d2400}, <No data fields>} __basic_ future< void>> = {<std:: __future_ base> = {<No data fields>},
_M_ state = <error reading variable: Cannot access memory at address 0x15>}, <No data fields>} ::MultiThreaded Compositor: :stop ( mir/load- all-platforms/ src/server/ compositor/ multi_threaded_ compositor. cpp:307 ::CompositorSta te::started
cleanup_ if_unwinding = {unwind = {__this = 0x1ce5f8}} ver::run (this=0xbebc41e8) mir/load- all-platforms/ src/server/ display_ server. cpp:206
input_ dispatcher = std::shared_ptr (count 2, weak 1) 0x1b8410,
compositor = std::shared_ptr (count 2, weak 1) 0x1ce5f8, connector =
prompt_ connector = std::shared_ptr (count 1, weak 1) 0x1cf20c,
input_ manager = std::shared_ptr (count 1, weak 1) 0x1d1fac,
server_ status_ listener = std::shared_ptr (count 1, weak 1) 0x1d99a4,
display_ changer = std::shared_ptr (count 3, weak 1) 0x1ce990} mir(mir: :ServerConfigur ation&, std::function<void (mir::DisplaySe rver&)> , std::function<void (int)> const&) (config=..., init=..., mir/load- all-platforms/ src/server/ run_mir. cpp:110
fatal_ error_strategy = {old_fatal_ error_handler = 0xb67d9f31 :fatal_ error_except( char const*, ...)>}
concurrent_ calls = {<std:: __atomic_ base<unsigned int>> = { mir/load- all-platforms/ src/server/ server. cpp:404
emergency_ cleanup = std::shared_ptr (count 2, weak 2) 0x16a284 mir/load- all-platforms/ examples/ server_ example. cpp:108
client_ kill_action = std::unique_ ptr<mir: :time:: Alarm> containing 0x1d4c80,
server_ stop_action = std::unique_ ptr<mir: :time:: Alarm> containing 0x1d5270, test_failed = {<std::atomic_bool> = {_M_base = {
_M_i = false}}, <No data fields>}}
screen_ rotation_ filter = std::shared_ptr (count 2, weak 0) 0x1597ec
printing_ filter = std::shared_ptr (count 2, weak 0) 0x159adc mir/load- all-platforms/ examples/ mir_demo_ server_ loader. cpp:40
#0 0xb6e59d44 in __libc_do_syscall ()
from /lib/arm-
No symbol table info available.
#1 0xb6e556b0 in pthread_
from /lib/arm-
No symbol table info available.
#2 0xb6ee56e4 in std::condition_
() from /usr/lib/
No symbol table info available.
#3 0xb69d18e2 in std::condition_
---Type <return> to continue, or q <return> to quit---
at /usr/arm-
No locals.
#4 0xb69d0ec6 in std::__
at /usr/arm-
__lock = {_M_device = 0x1d2408, _M_owns = true}
#5 0xb69d26bc in std::__
at /usr/arm-
No locals.
#6 0xb6a5c446 in mir::compositor
at /home/andreas/
f = @0x1d9a78: {<std::
__for_range = std::vector of length 1, capacity 1 = {
__for_begin = {<std::
---Type <return> to continue, or q <return> to quit---
__for_end = {<std::
#7 0xb6a5c15e in mir::compositor
this=0x1ce5f8)
at /home/andreas/
started = mir::compositor
#8 0xb6967c72 in mir::DisplaySer
at /home/andreas/
server = @0x16aa50: {emergency_cleanup =
std::shared_ptr (count 2, weak 2) 0x16a284, graphics_platform =
std::shared_ptr (count 1, weak 1) 0x16df64,
display = std::shared_ptr (count 6, weak 1) 0x16e074,
std::shared_ptr (count 1, weak 1) 0x1cee2c,
main_loop = std::shared_ptr (count 7, weak 1) 0x16a2d0,
---Type <return> to continue, or q <return> to quit---
#9 0xb6963cd2 in mir::run_
terminator=...)
at /home/andreas/
server_ptr = 0xbebc41e8
main_loop = std::shared_ptr (count 7, weak 1) 0x16a2d0
<mir:
server = {p = {_M_b = {_M_p = 0x16aa50}}}
_M_i = 1}, <No data fields>}
raii = {deleter = {<No data fields>}, owner = true}
#10 0xb698a732 in mir::Server::run (this=0xbebc4288)
at /home/andreas/
#11 0xb6c7070a in main (argc=3, argv=0xbebc4454)
at /home/andreas/
context = {
---Type <return> to continue, or q <return> to quit---
server = {self = std::shared_ptr (count 2, weak 0) 0x1584e4}
quit_filter = std::shared_ptr (count 2, weak 1) 0x159574
#12 0x00010f26 in main (argc=3, argv=0xbebc4454)
at /home/andreas/
so = 0x14b058
loaded_main = 0xb6c705f9 <main(int, char const**)>