Skip to content

Segfault in the vm #284

@layus

Description

@layus

Hi,

I have reproduced twice a segfault in the vm test /base/vm.oz.
The segfault occurs when running the "exception" test.

The common part is the thread running boost::asio::detail::timer_queue<...>::remove_timer(...).
I will try to reproduce this with a Debug build, but do you have any idea on the root cause of this ?

Program 1:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000055db38985f78 in std::function<long (mozart::VirtualMachine*)>::function(std::function<long (mozart::VirtualMachine*)> const&) ()
[Current thread is 1 (Thread 0x7f48a3371700 (LWP 13043))]
(gdb) bt
#0  0x000055db38985f78 in std::function<long (mozart::VirtualMachine*)>::function(std::function<long (mozart::VirtualMachine*)> const&) ()
#1  0x000055db3898605b in std::_Function_base::_Base_manager<void mozart::PropertyRegistry::registerReadOnlyProp<long>(mozart::VirtualMachine*, char const*, std::function<long (mozart::VirtualMachine*)> const&)::{lambda(mozart::VirtualMachine*)#1}>::_M_manager(std::_Any_data&, std::_Function_base::_Base_manager<void mozart::PropertyRegistry::registerReadOnlyProp<long>(mozart::VirtualMachine*, char const*, std::function<long (mozart::VirtualMachine*)> const&)::{lambda(mozart::VirtualMachine*)#1}> const&, std::_Manager_operation) ()
#2  0x000055db389863c6 in void std::vector<mozart::PropertyRecord, std::allocator<mozart::PropertyRecord> >::_M_emplace_back_aux<std::function<mozart::UnstableNode (mozart::VirtualMachine*)> const&, std::function<void (mozart::VirtualMachine*, mozart::RichNode)> const&>(std::function<mozart::UnstableNode (mozart::VirtualMachine*)> const&, std::function<void (mozart::VirtualMachine*, mozart::RichNode)> const&) ()
#3  0x000055db38986931 in void mozart::PropertyRegistry::registerReadWriteProp<long>(mozart::VirtualMachine*, char const*, long&) ()
#4  0x000055db389848c7 in mozart::PropertyRegistry::registerPredefined(mozart::VirtualMachine*) ()
#5  0x000055db38938cc6 in mozart::boostenv::BoostVM::BoostVM(mozart::boostenv::BoostEnvironment&, long, long, mozart::VirtualMachineOptions, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&&, bool) ()
#6  0x000055db3894c39c in mozart::boostenv::builtins::ModVM::New::call(mozart::VirtualMachine*, mozart::RichNode, mozart::UnstableNode&) ()
#7  0x000055db3894c616 in mozart::builtins::internal::BuiltinEntryPoint<mozart::boostenv::builtins::ModVM::New, 2ul, 2ul, mozart::UnstableNode&, mozart::UnstableNode&>::entryPoint(mozart::VirtualMachine*, mozart::UnstableNode&, mozart::UnstableNode&) ()
#8  0x000055db38974b77 in mozart::Thread::run() ()
#9  0x000055db38981038 in mozart::VirtualMachine::run() ()
#10 0x000055db3893ae1b in mozart::boostenv::BoostVM::run() ()
#11 0x000055db3890541a in main::{lambda(mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool)#1}::operator()(mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool) const ()
#12 0x000055db38905e14 in std::_Function_handler<bool (mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool), main::{lambda(mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool)#1}>::_M_invoke(std::_Any_data const&, mozart::VirtualMachine*&&, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&&, bool&&) ()
#13 0x000055db38938182 in mozart::boostenv::BoostVM::start(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool) ()
#14 0x00007f48a6604976 in ?? () from /usr/lib/libboost_thread.so.1.61.0
#15 0x00007f48a61c3454 in start_thread () from /usr/lib/libpthread.so.0
#16 0x00007f48a56637df in clone () from /usr/lib/libc.so.6

[Switching to thread 2 (Thread 0x7f48a7074740 (LWP 13042))]
#0  0x000055db38941328 in boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::remove_timer(boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::per_timer_data&) ()
(gdb) bt
#0  0x000055db38941328 in boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::remove_timer(boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::per_timer_data&) ()
#1  0x000055db389469c7 in boost::asio::detail::timer_queue<boost::asio::time_traits<boost::posix_time::ptime> >::get_ready_timers(boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&) ()
#2  0x000055db38913f84 in boost::asio::detail::epoll_reactor::run(bool, boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&) ()
#3  0x000055db3891459f in boost::asio::detail::task_io_service::run(boost::system::error_code&) ()
#4  0x000055db388f5f10 in main ()

Dump 2:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000055897e17e33b in boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::remove_timer(boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::per_timer_data&) ()
[Current thread is 1 (Thread 0x7f026554c740 (LWP 3500))]
(gdb) bt
#0  0x000055897e17e33b in boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::remove_timer(boost::asio::detail::timer_queue<boost::asio::detail::forwarding_posix_time_traits>::per_timer_data&) ()
#1  0x000055897e1839c7 in boost::asio::detail::timer_queue<boost::asio::time_traits<boost::posix_time::ptime> >::get_ready_timers(boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&) ()
#2  0x000055897e150f84 in boost::asio::detail::epoll_reactor::run(bool, boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&) ()
#3  0x000055897e15159f in boost::asio::detail::task_io_service::run(boost::system::error_code&) ()
#4  0x000055897e132f10 in main ()

(gdb) thread 2
[Switching to thread 2 (Thread 0x7f0261849700 (LWP 3501))]
#0  0x00007f02646a41cd in read () from /usr/lib/libpthread.so.0
(gdb) bt
#0  0x00007f02646a41cd in read () from /usr/lib/libpthread.so.0
#1  0x00007f0264efa0a3 in boost::random::random_device::operator()() () from /usr/lib/libboost_random.so.1.61.0
#2  0x000055897e180484 in void boost::random::detail::seed_array_int_impl<32, 624ul, boost::random::random_device, unsigned int>(boost::random::random_device&, unsigned int (&) [624ul]) ()
#3  0x000055897e176317 in mozart::boostenv::BoostVM::BoostVM(mozart::boostenv::BoostEnvironment&, long, long, mozart::VirtualMachineOptions, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&&, bool) ()
#4  0x000055897e18939c in mozart::boostenv::builtins::ModVM::New::call(mozart::VirtualMachine*, mozart::RichNode, mozart::UnstableNode&) ()
#5  0x000055897e189616 in mozart::builtins::internal::BuiltinEntryPoint<mozart::boostenv::builtins::ModVM::New, 2ul, 2ul, mozart::UnstableNode&, mozart::UnstableNode&>::entryPoint(mozart::VirtualMachine*, mozart::UnstableNode&, mozart::UnstableNode&) ()
#6  0x000055897e1b1b77 in mozart::Thread::run() ()
#7  0x000055897e1be038 in mozart::VirtualMachine::run() ()
#8  0x000055897e177e1b in mozart::boostenv::BoostVM::run() ()
#9  0x000055897e14241a in main::{lambda(mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool)#1}::operator()(mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool) const ()
#10 0x000055897e142e14 in std::_Function_handler<bool (mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool), main::{lambda(mozart::VirtualMachine*, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, bool)#1}>::_M_invoke(std::_Any_data const&, mozart::VirtualMachine*&&, std::unique_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::default_delete<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&&, bool&&) ()
#11 0x000055897e175182 in mozart::boostenv::BoostVM::start(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool) ()
#12 0x00007f0264adc976 in ?? () from /usr/lib/libboost_thread.so.1.61.0
#13 0x00007f026469b454 in start_thread () from /usr/lib/libpthread.so.0
#14 0x00007f0263b3b7df in clone () from /usr/lib/libc.so.6

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions