[Boost-bugs] [Boost C++ Libraries] #6201: managed_shared_memory construstor crashes

Subject: [Boost-bugs] [Boost C++ Libraries] #6201: managed_shared_memory construstor crashes
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2011-12-02 16:19:00


#6201: managed_shared_memory construstor crashes
----------------------------------------------------+-----------------------
 Reporter: djgaspa@… | Owner: igaztanaga
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: interprocess
  Version: Boost 1.48.0 | Severity: Problem
 Keywords: managed_shared_memory gcc optimization |
----------------------------------------------------+-----------------------
 The following code crashes with segmentation fault when compiled with the
 symbol -DNDEBUG and optimization -O1 or -O2 or -O3 using gcc 4.6.1 from
 ubuntu oneiric.

 {{{
 int main(int argc, char** argv)
 {
     namespace bi = boost::interprocess;
     const char* name = "foobar";
     bi::shared_memory_object::remove(name);
     bi::managed_shared_memory segment(bi::create_only, name, 10 * 1024 *
 1024);
 }
 }}}

 Without the NDEGUB symbol it always works. With NDEBUG it works only with
 -O0.

 The call stack obtained with -O1 -g -DNDEBUG is the following:

 {{{
 Program received signal SIGSEGV, Segmentation fault.
 get_color (n=<optimized out>) at
 /usr/include/boost/intrusive/detail/rbtree_node.hpp:136
 136 { return (color)ptr_bit::get_bits(n->parent_); }
 (gdb) bt
 #0 get_color (n=<optimized out>) at
 /usr/include/boost/intrusive/detail/rbtree_node.hpp:136
 #1
 boost::intrusive::rbtree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void>,
 true> >::rebalance_after_insertion (header=..., p=...)
     at /usr/include/boost/intrusive/rbtree_algorithms.hpp:855
 #2 0x0000000000409445 in
 insert_equal_upper_bound<boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family>::block_ctrl>,
 boost::intrusive::rbtree_impl<boost::intrusive::setopt<boost::intrusive::detail::base_hook_traits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family>::block_ctrl,
 boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void>,
 true>, (boost::intrusive::link_mode_type)0, boost::intrusive::default_tag,
 3>,
 std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family>::block_ctrl>,
 unsigned long, true> > > > (comp=..., new_node=..., h=...) at
 /usr/include/boost/intrusive/rbtree_algorithms.hpp:539
 #3
 boost::intrusive::rbtree_impl<boost::intrusive::setopt<boost::intrusive::detail::base_hook_traits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
 boost::interprocess::offset_ptr<void>, 0ul>::block_ctrl,
 boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void>,
 true>, (boost::intrusive::link_mode_type)0, boost::intrusive::default_tag,
 3>,
 std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
 boost::interprocess::offset_ptr<void>, 0ul>::block_ctrl>, unsigned long,
 true> >::insert_equal (this=0x7ffff6477038, value=<optimized out>)
     at /usr/include/boost/intrusive/rbtree.hpp:482
 #4 0x0000000000409550 in insert (value=<optimized out>, this=<optimized
 out>) at /usr/include/boost/intrusive/set.hpp:1569
 #5
 boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
 boost::interprocess::offset_ptr<void>, 0ul>::priv_add_segment
 (this=<optimized out>, addr=<optimized out>, size=<optimized out>)
     at /usr/include/boost/interprocess/mem_algo/rbtree_best_fit.hpp:538
 #6 0x0000000000409725 in rbtree_best_fit (this=0x7ffff6477010,
 extra_hdr_bytes=104, size=10485744) at
 /usr/include/boost/interprocess/mem_algo/rbtree_best_fit.hpp:374
 #7 segment_manager_base (reserved_bytes=104, size=10485744,
 this=0x7ffff6477010) at
 /usr/include/boost/interprocess/segment_manager.hpp:96
 #8 boost::interprocess::segment_manager<char,
 boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
 boost::interprocess::offset_ptr<void>, 0ul>,
 boost::interprocess::iset_index>::segment_manager (this=0x7ffff6477010,
 size=10485744) at /usr/include/boost/interprocess/segment_manager.hpp:408
 #9 0x000000000040a00b in create_impl (size=10485744, addr=0x7ffff6477010,
 this=0x7fffffffe0a0) at
 /usr/include/boost/interprocess/detail/managed_memory_impl.hpp:178
 #10 operator() (created=true, size=10485744, addr=0x7ffff6477010,
 this=0x7fffffffe088) at
 /usr/include/boost/interprocess/detail/managed_memory_impl.hpp:735
 #11
 boost::interprocess::detail::managed_open_or_create_impl<boost::interprocess::shared_memory_object,
 true,
 true>::priv_open_or_create<boost::interprocess::detail::create_open_func<boost::interprocess::detail::basic_managed_memory_impl<char,
 boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
 boost::interprocess::offset_ptr<void>, 0ul>,
 boost::interprocess::iset_index, 16ul> > > (
     this=0x7fffffffe0a8, type=<optimized out>, id=<optimized out>,
 size=10485760, mode=<optimized out>, addr=0x0, perm=...,
 construct_func=...)
     at
 /usr/include/boost/interprocess/detail/managed_open_or_create_impl.hpp:374
 #12 0x0000000000404bfb in
 managed_open_or_create_impl<boost::interprocess::detail::create_open_func<boost::interprocess::detail::basic_managed_memory_impl<char,
 boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family>,
 boost::interprocess::iset_index, 16u> > > (construct_func=...,
 mode=boost::interprocess::read_write, id=@0x7fffffffe0f8,
 this=0x7fffffffe0a8, perm=..., addr=0x0, size=10485760)
     at
 /usr/include/boost/interprocess/detail/managed_open_or_create_impl.hpp:170
 #13 basic_managed_shared_memory (perm=..., addr=0x0, size=10485760,
 name=0x40a8e8 "foobar", create_only=<optimized out>, this=0x7fffffffe0a0)
 at /usr/include/boost/interprocess/managed_shared_memory.hpp:90
 #14 main (argc=<optimized out>, argv=<optimized out>) at
 /home/gaspa/programmazione/openni/main.cpp:25
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/6201>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:07 UTC