Re: [Boost-bugs] [Boost C++ Libraries] #5340: Patch to support concrete base classes becomming abstract classes

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #5340: Patch to support concrete base classes becomming abstract classes
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-08-13 12:24:35


#5340: Patch to support concrete base classes becomming abstract classes
-------------------------------------+-------------------------------------
  Reporter: Aaron Barany | Owner: ramey
  <akb825@…> | Status: new
      Type: Patches | Component: serialization
 Milestone: To Be Determined | Severity: Showstopper
   Version: Boost 1.47.0 | Keywords: serialization abstract
Resolution: | concrete
-------------------------------------+-------------------------------------

Comment (by boldie@…):

 I just found another problem with the patch, on shutdown there is a pure
 virtual method called. Using the debugger and the this pointer of frame 7,
 I got a segfault, so this seems to be a dangling pointer which also caused
 the "pure virtual method called".

 I have tried to understand what happens here, but my insight to the
 singleton things from the lib is very limited. So far I found a suspicious
 part in boost/archive/impl/archive_serializer_map.ipp:175 where the
 element is only erased if the wrapper is not destroyed, but unfortunately
 the wrapper destroy will be set prior to the destructor calling of the
 iserialzer. Removing this part of code does not fix the problem, so it
 must be elsewhere.

 {{{
 pure virtual method called
 terminate called without an active exception

 Program received signal SIGABRT, Aborted.
 0xb7fdd424 in __kernel_vsyscall ()
 (gdb) bt
 #0 0xb7fdd424 in __kernel_vsyscall ()
 #1 0xb1a3120f in __GI_raise (sig=6) at
 ../nptl/sysdeps/unix/sysv/linux/raise.c:64
 #2 0xb1a34855 in __GI_abort () at abort.c:91
 #3 0xb1ca613d in __gnu_cxx::__verbose_terminate_handler() () from
 /usr/lib/i386-linux-gnu/libstdc++.so.6
 #4 0xb1ca3ed3 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6
 #5 0xb1ca3f0f in std::terminate() () from /usr/lib/i386-linux-
 gnu/libstdc++.so.6
 #6 0xb1ca4b82 in __cxa_pure_virtual () from /usr/lib/i386-linux-
 gnu/libstdc++.so.6
 #7 0xb2aea283 in boost::serialization::extended_type_info::operator<
 (this=0x83d5c34, rhs=...) at
 libs/serialization/src/extended_type_info.cpp:169
 #8 0xb2ae00f7 in operator< (rhs=..., this=0x83d5c58) at
 ./boost/archive/detail/basic_serializer.hpp:54
 #9
 boost::archive::detail::basic_serializer_map::type_info_pointer_compare::operator()
 (this=0xb2b15188, lhs=0x83d5c58, rhs=0x83d5cac)
     at libs/serialization/src/basic_serializer_map.cpp:42
 #10 0xb2ae0472 in std::_Rb_tree<boost::archive::detail::basic_serializer*,
 boost::archive::detail::basic_serializer*,
 std::_Identity<boost::archive::detail::basic_serializer*>,
 boost::archive::detail::basic_serializer_map::type_info_pointer_compare,
 std::allocator<boost::archive::detail::basic_serializer*> >::equal_range
 (this=0xb2b15188, __k=@0xbfffeee4: 0x83d5cac) at
 /usr/include/c++/4.6/bits/stl_tree.h:1158
 #11 0xb2ae028e in equal_range (__x=@0xbfffeee4: 0x83d5cac,
 this=0xb2b15188) at /usr/include/c++/4.6/bits/stl_multiset.h:649
 #12 boost::archive::detail::basic_serializer_map::erase (this=0xb2b15188,
 bs=0x83d5cac) at libs/serialization/src/basic_serializer_map.cpp:57
 #13 0xb2ae2939 in
 boost::archive::detail::archive_serializer_map<boost::archive::binary_iarchive>::erase
 (bs=0x83d5cac)
     at ./boost/archive/impl/archive_serializer_map.ipp:175
 #14 0xb4f7a9b3 in
 boost::archive::detail::iserializer<boost::archive::binary_iarchive,
 boost::intrusive_ptr<ngp::Variant::ValueBase> >::~iserializer (
     this=0x83d5ca8, __in_chrg=<optimized out>) at
 /usr/include/boost/archive/detail/iserializer.hpp:161
 #15 0xb4f7aa58 in
 boost::serialization::detail::singleton_wrapper<boost::archive::detail::iserializer<boost::archive::binary_iarchive,
 boost::intrusive_ptr<ngp::Variant::ValueBase> > >::~singleton_wrapper
 (this=0x83d5ca8, __in_chrg=<optimized out>) at
 /usr/include/boost/serialization/singleton.hpp:112
 #16 0xb1a3632b in __cxa_finalize (d=0xb7f95fc0) at cxa_finalize.c:56
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/5340#comment:8>
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:16 UTC