Folks,
I'm running some serialization
unit-tests which pass with flying colors under 1.35.0 and earlier, however
they seg-fault on exit when run through
1.36.0. The error
appears to deal with destruction of extended_type_info_typeid objects, and
*only* manifests itself when I load an archive through a
shared_ptr<T>. The load will appear to function properly, then on
exit of the application, <<Death>>. This occurs even if I
remove BOOST_CLASS_EXPORT && BOOST_CLASS_TYPE_INFO as the shared_ptr
is to the derived element, and I'm not testing through a base.
My lastest guess is that I may be missing some
#define BOOST_SOME_MAGIC_NEW_OPTION
//////////////////////////// pseduo
code: ////////////////////////////
BOOST_AUTO_TEST_CASE(
MyTestClass_Serialization )
{
boost::shared_ptr<MyTestClass> outtie ( new MyTestClass()
);
boost::shared_ptr<MyTestClass>
innie;
std::ofstream os(
"MyTestClass_Serialization.xml", std::ios_base::out );
my_pack< MyTestClass >( os, outtie );
os.close();
std::ifstream is( "MyTestClass_Serialization.xml", std::ios_base::in
);
my_unpack< MyTestClass >( is, innie
);
is.close();
BOOST_CHECK_NO_THROW();
}
//////////////////////////// ddd output:
////////////////////////////
*** No errors detected
[New Thread
0xb73e26c0 (LWP 4715)]
Program received signal SIGSEGV, Segmentation
fault.
[Switching to Thread 0xb73e26c0 (LWP 4715)]
0xb76bb56b in
std::_Rb_tree_rebalance_for_erase () from /usr/lib/libstdc++.so.6
(gdb)
bt
#0 0xb76bb56b in std::_Rb_tree_rebalance_for_erase () from
/usr/lib/libstdc++.so.6
#1 0xb7a38221 in
std::_Rb_tree<boost::serialization::detail::extended_type_info_typeid_0
const*, boost::serialization::detail::extended_type_info_typeid_0 const*,
std::_Identity<boost::serialization::detail::extended_type_info_typeid_0
const*>, boost::serialization::detail::type_compare,
std::allocator<boost::serialization::detail::extended_type_info_typeid_0
const*> >::erase (this=0xb7a93c94, __position={_M_node = 0x810a3f8}) at
/usr/include/c++/4.2/bits/stl_tree.h:1261
#2 0xb7a38270 in
std::multiset<boost::serialization::detail::extended_type_info_typeid_0
const*, boost::serialization::detail::type_compare,
std::allocator<boost::serialization::detail::extended_type_info_typeid_0
const*> >::erase (this=0xb7a93c94, __position={_M_node = 0x810a3f8}) at
/usr/include/c++/4.2/bits/stl_multiset.h:346
#3 0xb7a37482 in
boost::serialization::detail::extended_type_info_typeid_0::type_unregister
(this=0x810749c) at
/opt/tomodev/env/boost/libs/serialization/src/extended_type_info_typeid.cpp:93
#4
0x080b001a in ~extended_type_info_typeid (this=0x810749c) at
/opt/tomodev/env/boost/boost/serialization/extended_type_info_typeid.hpp:80
#5
0x0809ebe2 in __tcf_49 () at
/opt/tomodev/env/boost/boost/serialization/singleton.hpp:104
#6
0xb74f7084 in exit () from /lib/tls/i686/cmov/libc.so.6
#7 0xb74df458
in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
#8
0x0809e691 in _start ()
Cheers,
Timothy St. Clair
[
timothysc@gmail.com]