freebsd / kyua

Testing framework for infrastructure software
BSD 3-Clause "New" or "Revised" License
147 stars 42 forks source link

Segfault when CPU is busy #218

Open ncopa opened 2 years ago

ncopa commented 2 years ago

I get a segfault when running kyua test on alpine linux' abuild while building kernel at the same time. It only seems to happen when CPU is busy.

I was able to generate a core dump with debugging symbols:

Reading symbols from /usr/bin/kyua...
Reading symbols from /usr/lib/debug//usr/bin/kyua.debug...
[New LWP 27290]
Core was generated by `kyua test'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  std::_Rb_tree<utils::datetime::timestamp, std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > >, std::_Select1st<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > >, std::less<utils::datetime::timestamp>, std::allocator<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > > >::_M_mbegin (this=0x40)
    at /usr/include/c++/11.2.1/bits/stl_tree.h:734
734       _M_mbegin() const _GLIBCXX_NOEXCEPT
(gdb) bt
#0  std::_Rb_tree<utils::datetime::timestamp, std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > >, std::_Select1st<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > >, std::less<utils::datetime::timestamp>, std::allocator<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > > >::_M_mbegin (this=0x40)
    at /usr/include/c++/11.2.1/bits/stl_tree.h:734
#1  std::_Rb_tree<utils::datetime::timestamp, std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > >, std::_Select1st<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > >, std::less<utils::datetime::timestamp>, std::allocator<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > > >::_M_begin (this=0x40)
    at /usr/include/c++/11.2.1/bits/stl_tree.h:739
#2  std::_Rb_tree<utils::datetime::timestamp, std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > >, std::_Select1st<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > >, std::less<utils::datetime::timestamp>, std::allocator<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > > >::find (__k=..., this=0x40)
    at /usr/include/c++/11.2.1/bits/stl_tree.h:2523
#3  std::map<utils::datetime::timestamp, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> >, std::less<utils::datetime::timestamp>, std::allocator<std::pair<utils::datetime::timestamp const, std::set<utils::signals::timer*, std::less<utils::signals::timer*>, std::allocator<utils::signals::timer*> > > > >::find (__x=..., this=0x40) at /usr/include/c++/11.2.1/bits/stl_map.h:1170
#4  (anonymous namespace)::global_state::remove_from_all_timers (timer=0x7f5152f573a0, this=0x0) at utils/signals/timer.cpp:140
#5  (anonymous namespace)::global_state::unprogram (timer=0x7f5152f573a0, this=0x0) at utils/signals/timer.cpp:321
#6  utils::signals::timer::unprogram (this=0x7f5152f573a0) at utils/signals/timer.cpp:536
#7  0x000055c4d5646948 in utils::process::executor::executor_handle::impl::post_wait (this=this@entry=0x7f5152f793a0, original_pid=28725, status=...)
    at /usr/include/c++/11.2.1/bits/shared_ptr_base.h:1295
#8  0x000055c4d564542d in utils::process::executor::executor_handle::wait_any (this=this@entry=0x7f5152f63b68) at utils/process/executor.cpp:852
#9  0x000055c4d5616c43 in engine::scheduler::scheduler_handle::wait_any (this=this@entry=0x7ffc0160f6f8) at /usr/include/c++/11.2.1/bits/shared_ptr_base.h:1295
#10 0x000055c4d56077b3 in drivers::run_tests::drive (kyuafile_path=..., build_root=..., store_path=..., filters=..., user_config=..., hooks=...)
    at drivers/run_tests.cpp:315
#11 0x000055c4d5602065 in cli::cmd_test::run (this=<optimized out>, ui=0x7ffc01610090, cmdline=..., user_config=...) at cli/cmd_test.cpp:160
#12 0x000055c4d55f5c77 in utils::cmdline::base_command<utils::config::tree>::main (data=..., args=..., ui=0x7ffc01610090, this=0x7f515334a170)
    at ./utils/cmdline/base_command.ipp:96
#13 (anonymous namespace)::run_subcommand (user_config=..., args=..., command=0x7f515334a170, ui=0x7ffc01610090) at cli/main.cpp:139
#14 (anonymous namespace)::safe_main (mock_command=..., 
    argv=0x55c4d5601eb0 <cli::cmd_test::run(utils::cmdline::ui*, utils::cmdline::parsed_cmdline const&, utils::config::tree const&)>, argc=0, ui=0x7ffc01610090)
    at cli/main.cpp:228
#15 cli::main (ui=ui@entry=0x7ffc01610090, argc=argc@entry=2, argv=argv@entry=0x7ffc016102a8, mock_command=...) at cli/main.cpp:280
#16 0x000055c4d55f5fbc in cli::main (argc=2, argv=0x7ffc016102a8) at cli/main.cpp:353
#17 0x00007f51532cfa22 in libc_start_main_stage2 (main=0x55c4d55f48e8 <main(int, char const* const*)>, argc=2, argv=0x7ffc016102a8)
    at src/env/__libc_start_main.c:95
#18 0x000055c4d55f6b83 in _start ()