Boost logo

Boost :

Subject: Re: [boost] [intrusive] Possible bug in bstree_algorithms.hpp
From: Lars Hagström (lars_at_[hidden])
Date: 2014-09-11 16:56:43


I've added more debugging to rbtree_best_fit.hpp in a fork of interprocess
at github.com, DonOregano/interprocess.git
Direct link to my patched file
https://github.com/DonOregano/interprocess/blob/aba6893976f5be62eed0763c3036013fa3717694/include/boost/interprocess/mem_algo/rbtree_best_fit.hpp

Anyway, among the additions are the checks that I think you wanted above,
that shows that prev_block and next_block are always in the multiset, as
per your email.

I also added logs to every priv_allocate to check that the block that we're
trying to deallocate has in fact been allocated (that it is not just some
random block).

I also print out m_prev_size and m_size, and they're not obviously
corrupted by randomness, they contain 4s and 0s etc, not wierd numbers...
That doesnt really prove anything, though...

I also added a check to make sure that block is not in the multiset, which
it is not.

Just a couple of stupid questions: Are we certain that check() is correct?
And should the invariants hold midway through priv_deallocate? Just so that
I've not inserted checks that are not meant to hold in that place and that
this thing is a red herring?

Below is the output produced by my program, with the logs added, and even
further down (sorry) is the stacktrace from the failed check() call.

Allocated 0x7ffff20080f0
Allocated 0x7ffff2008200
Allocated 0x7ffff2008280
Allocated 0x7ffff20082c0
Allocated priv_expand_both_sides = 0x7ffff20082c0
Allocated 0x7ffff2008310
Allocated 0x7ffff2008390
Allocated 0x7ffff20083d0
Allocated 0x7ffff2008420
Allocated 0x7ffff20084c0
Allocated 0x7ffff2008540
Allocated 0x7ffff2008580
priv_deallocate addr: 0x7ffff20083d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
priv_deallocate addr: 0x7ffff2008390
block in imultiset = false
block->m_prev_size = 0
block->m_size = 4
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008310
block in imultiset = false
block->m_prev_size = 1
block->m_size = 8
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff20082c0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008280
block in imultiset = false
block->m_prev_size = 0
block->m_size = 4
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
Allocated 0x7ffff2008200
Allocated 0x7ffff2008280
Allocated 0x7ffff20082d0
Allocated priv_expand_both_sides = 0x7ffff20082d0
Allocated priv_expand_both_sides = 0x7ffff20082d0
Allocated 0x7ffff2008360
Allocated 0x7ffff20085d0
Allocated 0x7ffff2008620
Allocated 0x7ffff2008690
Allocated 0x7ffff2008730
Allocated 0x7ffff20087b0
Allocated 0x7ffff2008800
priv_deallocate addr: 0x7ffff2008620
block in imultiset = false
block->m_prev_size = 0
block->m_size = 7
priv_deallocate addr: 0x7ffff20085d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008360
block in imultiset = false
block->m_prev_size = 8389754706664715122
block->m_size = 8
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff20082d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 9
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008280
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
Allocated 0x7ffff20085d0
Allocated 0x7ffff2008640
Allocated 0x7ffff2008200
priv_deallocate addr: 0x7ffff2008640
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
Allocated 0x7ffff2008290
Allocated 0x7ffff2008300
Allocated 0x7ffff2008370
Allocated 0x7ffff2008870
Allocated 0x7ffff20088e0
priv_deallocate addr: 0x7ffff2008300
block in imultiset = false
block->m_prev_size = 0
block->m_size = 7
priv_deallocate addr: 0x7ffff2008290
block in imultiset = false
block->m_prev_size = 0
block->m_size = 7
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 9
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff20085d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 7
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
Allocated 0x7ffff20085d0
Allocated 0x7ffff2008650
Allocated 0x7ffff2008200
priv_deallocate addr: 0x7ffff2008650
block in imultiset = false
block->m_prev_size = 0
block->m_size = 4
Allocated priv_expand_both_sides = 0x7ffff2008200
Allocated priv_expand_both_sides = 0x7ffff2008200
Allocated priv_expand_both_sides = 0x7ffff2008200
Allocated 0x7ffff2008950
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 23
Allocated 0x7ffff2008200
Allocated 0x7ffff2008c20
Allocated 0x7ffff2008280
Allocated 0x7ffff2008e30
Allocated 0x7ffff2008eb0
priv_deallocate addr: 0x7ffff2008c20
block in imultiset = false
block->m_prev_size = 0
block->m_size = 33
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
priv_deallocate addr: 0x7ffff2008950
block in imultiset = false
block->m_prev_size = 0
block->m_size = 45
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff20085d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
Allocated 0x7ffff2008200
Allocated 0x7ffff2008320
Allocated 0x7ffff20085d0
Allocated priv_expand_both_sides = 0x7ffff20085d0
Allocated 0x7ffff2008950
Allocated 0x7ffff2008620
Allocated 0x7ffff20089d0
Allocated 0x7ffff2008a20
Allocated 0x7ffff2008ac0
Allocated 0x7ffff2008b40
Allocated 0x7ffff2008b80
priv_deallocate addr: 0x7ffff20089d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
priv_deallocate addr: 0x7ffff2008620
block in imultiset = false
block->m_prev_size = 1
block->m_size = 4
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008950
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff20085d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008320
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
Allocated 0x7ffff2008200
Allocated 0x7ffff2008320
Allocated 0x7ffff20085d0
Allocated priv_expand_both_sides = 0x7ffff20085d0
Allocated priv_expand_both_sides = 0x7ffff20085d0
Allocated 0x7ffff2008950
Allocated 0x7ffff20089d0
Allocated 0x7ffff2008bd0
Allocated 0x7ffff2008c60
Allocated 0x7ffff2008d00
Allocated 0x7ffff2008d80
Allocated 0x7ffff20090c0
priv_deallocate addr: 0x7ffff2008bd0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 9
priv_deallocate addr: 0x7ffff20089d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
priv_deallocate addr: 0x7ffff2008950
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff20085d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 9
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008320
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
Allocated 0x7ffff2008dc0
Allocated 0x7ffff2008320
Allocated 0x7ffff2008bd0
priv_deallocate addr: 0x7ffff2008320
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
Allocated 0x7ffff2008200
Allocated 0x7ffff20085d0
Allocated 0x7ffff2008950
Allocated 0x7ffff2009150
Allocated 0x7ffff20091c0
priv_deallocate addr: 0x7ffff20085d0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 9
merge_with_prev = false, merge_with_next = true
next_block in imultiset = true
priv_deallocate addr: 0x7ffff2008200
block in imultiset = false
block->m_prev_size = 0
block->m_size = 8
priv_deallocate addr: 0x7ffff2008bd0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 9
priv_deallocate addr: 0x7ffff2008dc0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 7
Allocated 0x7ffff2008dc0
Allocated 0x7ffff20089f0
Allocated 0x7ffff2008320
priv_deallocate addr: 0x7ffff20089f0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 3
Allocated 0x7ffff2008bd0
priv_deallocate addr: 0x7ffff2008320
block in imultiset = false
block->m_prev_size = 0
block->m_size = 5
Allocated 0x7ffff2008320
Allocated 0x7ffff2009250
priv_deallocate addr: 0x7ffff2008bd0
block in imultiset = false
block->m_prev_size = 0
block->m_size = 9
Allocated priv_expand_both_sides = 0x7ffff2009250
Allocated 0x7ffff2008200
Allocated 0x7ffff2008240
Allocated priv_expand_both_sides = 0x7ffff2009250
Allocated 0x7ffff2008bd0
Allocated 0x7ffff2008c10
Allocated priv_expand_both_sides = 0x7ffff2009250
Allocated 0x7ffff20085d0
Allocated 0x7ffff2008610
Allocated 0x7ffff2009a60
Allocated 0x7ffff2009ad0
Allocated 0x7ffff2008650
Allocated 0x7ffff200a180
Allocated 0x7ffff200a1c0
Allocated 0x7ffff200a200
Allocated 0x7ffff200a240
Allocated 0x7ffff200a280
Allocated 0x7ffff200a2c0
Allocated 0x7ffff200a300
Allocated 0x7ffff200a3a0
Allocated 0x7ffff200a410
Allocated 0x7ffff200aac0
Allocated 0x7ffff200ab00
Allocated 0x7ffff200ab40
Allocated 0x7ffff200ab80
Allocated 0x7ffff200abc0
Allocated 0x7ffff200ac00
Allocated 0x7ffff200ac40
priv_deallocate addr: 0x7ffff2008650
block in imultiset = false
block->m_prev_size = 0
block->m_size = 4
priv_deallocate addr: 0x7ffff200a180
block in imultiset = false
block->m_prev_size = 0
block->m_size = 4
priv_deallocate addr: 0x7ffff200a1c0
block in imultiset = false
block->m_prev_size = 4
block->m_size = 4
merge_with_prev = true, merge_with_next = false
prev_block in imultiset = true

Here we fail the check() call indicated in the source.

Here is a backtrace from the failed check call:

#0 0x00007ffff5ab7d67 in raise () from /usr/lib/libc.so.6
#1 0x00007ffff5ab9118 in abort () from /usr/lib/libc.so.6
#2 0x00007ffff5ab0bdd in __assert_fail_base () from /usr/lib/libc.so.6
#3 0x00007ffff5ab0c92 in __assert_fail () from /usr/lib/libc.so.6
#4 0x00007ffff746e985 in
boost::intrusive::detail::bstree_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u>,
boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl>,
boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> >,
boost::intrusive::detail::empty_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> > >::operator() (this=0x7fffffffd060,
p=..., check_return_left=..., check_return_right=..., check_return=...) at
/home/lars/boost/modular-boost/boost/intrusive/bstree_algorithms.hpp:78
#5 0x00007ffff746cf29 in
boost::intrusive::detail::rbtree_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u>,
boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl>,
boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> >,
boost::intrusive::detail::empty_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> > >::operator() (this=0x7fffffffd060,
p=..., check_return_left=..., check_return_right=..., check_return=...) at
/home/lars/boost/modular-boost/boost/intrusive/rbtree_algorithms.hpp:88
#6 0x00007ffff746b82b in
boost::intrusive::bstree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>
>::check_subtree<boost::intrusive::detail::rbtree_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u>,
boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl>,
boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> >,
boost::intrusive::detail::empty_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> > > > (node=..., checker=...,
check_return=...) at
/home/lars/boost/modular-boost/boost/intrusive/bstree_algorithms.hpp:2088
#7 0x00007ffff7469052 in
boost::intrusive::bstree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>
>::check<boost::intrusive::detail::rbtree_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u>,
boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl>,
boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> >,
boost::intrusive::detail::empty_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> > > > (header=..., checker=...,
checker_return=...) at
/home/lars/boost/modular-boost/boost/intrusive/bstree_algorithms.hpp:1504
#8 0x00007ffff746706d in
boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u>, void, unsigned long, true,
(boost::intrusive::algo_types)5,
boost::intrusive::detail::default_header_holder<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true> >
>::check<boost::intrusive::detail::empty_node_checker<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u> > > (this=0x7ffff2008038,
extra_checker=...) at
/home/lars/boost/modular-boost/boost/intrusive/bstree.hpp:1907
#9 0x00007ffff7464da8 in
boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::block_ctrl,
boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0,
boost::intrusive::default_tag, 3u>, void, unsigned long, true,
(boost::intrusive::algo_types)5,
boost::intrusive::detail::default_header_holder<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,
long, unsigned long, 0ul>, true> > >::check (this=0x7ffff2008038) at
/home/lars/boost/modular-boost/boost/intrusive/bstree.hpp:1914
#10 0x00007ffff74623d0 in
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::priv_deallocate (this=0x7ffff2008010, addr=0x7ffff200a1c0) at
/home/lars/boost/modular-boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp:1411
#11 0x00007ffff745f805 in
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>,
0ul>::deallocate (this=0x7ffff2008010, addr=0x7ffff200a1c0) at
/home/lars/boost/modular-boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp:1337
#12 0x00007ffff745d443 in
boost::interprocess::segment_manager_base<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>
>::deallocate (this=0x7ffff2008010, addr=0x7ffff200a1c0) at
/home/lars/boost/modular-boost/boost/interprocess/segment_manager.hpp:225
#13 0x00007ffff745d305 in boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> >::deallocate (this=0x7ffff2009cb0,
ptr=...) at
/home/lars/boost/modular-boost/boost/interprocess/allocators/allocator.hpp:157
#14 0x00007ffff745ae82 in
boost::container::container_detail::basic_string_base<boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >::deallocate (this=0x7ffff2009cb0,
p=..., n=56) at
/home/lars/boost/modular-boost/boost/container/string.hpp:281
#15 0x00007ffff7459a1c in
boost::container::container_detail::basic_string_base<boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >::deallocate_block
(this=0x7ffff2009cb0) at
/home/lars/boost/modular-boost/boost/container/string.hpp:327
#16 0x00007ffff745998d in
boost::container::container_detail::basic_string_base<boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >::~basic_string_base
(this=0x7ffff2009cb0, __in_chrg=<optimized out>) at
/home/lars/boost/modular-boost/boost/container/string.hpp:106
#17 0x00007ffff7458cea in boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >::~basic_string (this=0x7ffff2009cb0,
__in_chrg=<optimized out>) at
/home/lars/boost/modular-boost/boost/container/string.hpp:708
#18 0x00007ffff745f8da in
boost::interprocess::allocator<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> >::destroy (this=0x7fffffffd9e0, ptr=...)
at
/home/lars/boost/modular-boost/boost/interprocess/allocators/allocator.hpp:268
#19 0x00007ffff745d498 in
boost::container::allocator_traits<boost::interprocess::allocator<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> >
>::priv_destroy<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > > > (a=..., p=0x7ffff2009cb0) at
/home/lars/boost/modular-boost/boost/container/allocator_traits.hpp:300
#20 0x00007ffff745b0b4 in
boost::container::allocator_traits<boost::interprocess::allocator<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> >
>::destroy<boost::container::basic_string<char, std::char_traits<char>,
boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > > > (a=..., p=0x7ffff2009cb0) at
/home/lars/boost/modular-boost/boost/container/allocator_traits.hpp:242
#21 0x00007ffff7459c23 in
boost::container::destroy_alloc_n<boost::interprocess::allocator<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> >, boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> >
>*>(boost::interprocess::allocator<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> >&, boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >*,
std::iterator_traits<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >*>::difference_type,
boost::container::container_detail::enable_if_c<!boost::has_trivial_destructor<std::iterator_traits<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >*>::value_type>::value, void>::type*)
(a=..., f=0x7ffff2009cd0, n=37) at
/home/lars/boost/modular-boost/boost/container/detail/utilities.hpp:1073
#22 0x00007ffff7458d3c in
boost::container::vector<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >,
boost::interprocess::allocator<boost::container::basic_string<char,
std::char_traits<char>, boost::interprocess::allocator<char,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>,
boost::interprocess::iset_index> > >::~vector (this=0x7fffffffd9e0,
__in_chrg=<optimized out>) at
/home/lars/boost/modular-boost/boost/container/vector.hpp:787
#23 0x00007ffff746d82b in
Safir::Dob::Typesystem::Internal::EnumDescriptionShm::~EnumDescriptionShm
(this=0x7fffffffd998, __in_chrg=<optimized out>) at
/home/lars/safir_sdk_core/src/dots/dots_kernel.ss/src/dots_shm_repository.h:140
#24 0x00007ffff74e7a82 in std::pair<long const,
Safir::Dob::Typesystem::Internal::EnumDescriptionShm>::~pair
(this=0x7fffffffd990, __in_chrg=<optimized out>) at
/usr/include/c++/4.9.1/bits/stl_pair.h:96
#25 0x00007ffff74e4565 in
Safir::Dob::Typesystem::Internal::RepositoryShm::CreateShmCopyOfRepository
(srcRepository=..., shmRepositoryName="DOTS_REPOSITORY", sharedMemory=...)
at
/home/lars/safir_sdk_core/src/dots/dots_kernel.ss/src/dots_shm_repository.cpp:55
#26 0x00007ffff7456395 in
Safir::Dob::Typesystem::Internal::RepositoryKeeper::Create
(this=0x7ffff77d1cc0
<Safir::Dob::Typesystem::Internal::RepositoryKeeper::Instance()::instance>)
at
/home/lars/safir_sdk_core/src/dots/dots_kernel.ss/src/dots_repository_keeper.cpp:172
#27 0x00007ffff536dd7e in
Safir::Utilities::StartupSynchronizerImpl::FirstStart (this=0x648860,
synchronized=0x7ffff77d1cc0
<Safir::Dob::Typesystem::Internal::RepositoryKeeper::Instance()::instance>)
at
/home/lars/safir_sdk_core/src/lluf/lluf_startup_synchronizer.ss/src/StartupSynchronizer.cpp:181
#28 0x00007ffff536dbb6 in Safir::Utilities::StartupSynchronizerImpl::Start
(this=0x648860, synchronized=0x7ffff77d1cc0
<Safir::Dob::Typesystem::Internal::RepositoryKeeper::Instance()::instance>)
at
/home/lars/safir_sdk_core/src/lluf/lluf_startup_synchronizer.ss/src/StartupSynchronizer.cpp:154
#29 0x00007ffff536aefa in Safir::Utilities::StartupSynchronizer::Start
(this=0x7ffff77d1cc8
<Safir::Dob::Typesystem::Internal::RepositoryKeeper::Instance()::instance+8>,
synchronized=0x7ffff77d1cc0
<Safir::Dob::Typesystem::Internal::RepositoryKeeper::Instance()::instance>)
at
/home/lars/safir_sdk_core/src/lluf/lluf_startup_synchronizer.ss/src/StartupSynchronizer.cpp:423
#30 0x00007ffff7455c9b in
Safir::Dob::Typesystem::Internal::RepositoryKeeper::Initialize
(sharedMemorySize=10485760, paths=std::vector of length 1, capacity 1 =
{...}) at
/home/lars/safir_sdk_core/src/dots/dots_kernel.ss/src/dots_repository_keeper.cpp:53
#31 0x00007ffff748330b in
Safir::Dob::Typesystem::Internal::InitHelper::Init () at
/home/lars/safir_sdk_core/src/dots/dots_kernel.ss/src/dots_init_helper.h:60
#32 0x00007ffff7485ae3 in boost::call_once<void (*)()> (flag=...,
f=0x7ffff74832c1 <Safir::Dob::Typesystem::Internal::InitHelper::Init()>) at
/home/lars/boost/modular-boost/boost/thread/pthread/once_atomic.hpp:149
#33 0x00007ffff7483882 in Safir::Dob::Typesystem::Internal::Init () at
/home/lars/safir_sdk_core/src/dots/dots_kernel.ss/src/dots_init_helper.h:106
#34 0x00007ffff747794b in DotsC_NumberOfTypeIds () at
/home/lars/safir_sdk_core/src/dots/dots_kernel.ss/src/dots_kernel.cpp:123
#35 0x0000000000419b7d in CheckConfigurationDotsKernel::SimpleCheck () at
/home/lars/safir_sdk_core/src/dots/dots_configuration_check.ss/src/dots_configuration_check.cpp:108
#36 0x0000000000419b56 in CheckConfigurationDotsKernel::Run (cmd=...) at
/home/lars/safir_sdk_core/src/dots/dots_configuration_check.ss/src/dots_configuration_check.cpp:99
#37 0x000000000041428a in main (argc=1, argv=0x7fffffffe628) at
/home/lars/safir_sdk_core/src/dots/dots_configuration_check.ss/src/dots_configuration_check.cpp:235
(gdb)

*ugh*. What can we do to make this debugging easier? It feels a bit
inefficient...
I could set up a VM on for example Digital Ocean and get everything up and
running, and give you the password and some instructions?

Unless you prefer to do it this way, of course...

Cheers
Lars


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk