Boost logo

Boost Users :

From: Robert Ramey (ramey_at_[hidden])
Date: 2008-08-20 17:02:05


This has been reported in two trak items.

I've looked at it and made changes which I believe will
address the problem. But I haven't been able to test it
yet.

Robert.

Robert Mecklenburg wrote:
>> Tim St. Clair writes:
>>> 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.
>>> ...
>>> 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
>>
>> I am having similar problems, only there are no shared pointers
>> involved. I was getting this segv also, but as I pared the example
>> down and it mutated into a memory corruption problem:
>>
>> *** glibc detected *** ./serio: double free or corruption
>> (fasttop): 0x0805c5c8 *** ======= Backtrace: =========
>> /lib/tls/i686/cmov/libc.so.6[0xb7cd5a85]
>> /lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7cd94f0]
>> /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7ea1b11]
>>
>>
>>
>>
>>
>>
>> /home/mecklen/work/boost-install/lib/libboost_serialization-gcc42-mt-1_36.so.1.36.0(_ZN5boost13serialization6detail27extended_type_info_typeid_015type_unregisterEv+0xf6)[0xb7f3c8d6]
>> ./serio(_ZN5boost13serialization25extended_type_info_typeidI4DataED1Ev+0x1c)[0x805576a]
>> ./serio(__gxx_personality_v0+0x35e)[0x8053f36]
>> /lib/tls/i686/cmov/libc.so.6(exit+0xd4)[0xb7c98084]
>> /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe8)[0xb7c80458]
>> ./serio(__gxx_personality_v0+0x69)[0x8053c41]
>>
>> The problem I'm experiencing only seems to occur when the class
>> implementation is in a shared library. I have attached a simple
>> example that reproduces the bug.
>>
>> My system details are:
>>
>> Intel i686 cpu
>> Ubuntu Hardy Heron
>> g++ (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
>> libstdc++6-4.2-dev 4.2.3-2ubuntu7
>> Boost 1.36.0
>> ./configure --prefix=/home/mecklen/work/boost-install \
>> --without-libraries=python \
>> --without-icu --without-mpi
>>
>> This is a real show-stopper for us. Any help would be greatly
>> appreciated.
>>
>> Thanks,
>> --
>> Robert
>>
>
>
>
>> // g++ -I/home/mecklen/work/boost-install/include/boost-1_36
>> serio.cpp -o serio -L/home/mecklen/work/boost-install/lib/
>> -lboost_serialization-gcc42-mt -lboost_unit_test_framework-gcc42-mt
>>
>> #define BOOST_TEST_DYN_LINK
>> #define BOOST_TEST_MAIN
>>
>> #include <boost/test/auto_unit_test.hpp>
>> #include <boost/archive/text_oarchive.hpp>
>> #include <sstream>
>>
>> struct Data
>> {
>> Data() : n_(10) {}
>> template <class Archive> void serialize(Archive & ar, const
>> unsigned version); int n_;
>> };
>>
>> BOOST_AUTO_TEST_CASE(serioTest)
>> {
>> Data d;
>> std::ostringstream os;
>> boost::archive::text_oarchive oa(os);
>>
>> oa & d; // <<<<< Remove this and no crash.
>> }
>>
>
>
>
>> #include <boost/archive/text_oarchive.hpp> //
>> serialization::text_oarchive #include
>> <boost/serialization/export.hpp>
>>
>> struct Data
>> {
>> Data() : n_(10) {}
>> template <class Archive> void serialize(Archive & ar, const
>> unsigned version); int n_;
>> };
>>
>> BOOST_CLASS_EXPORT(Data);
>>
>> template <class Archive>
>> void
>> Data::serialize(Archive & ar, const unsigned /* version */)
>> {
>> ar & n_;
>> }
>>
>
>
>
>> #! /bin/bash -x
>> rm -f serioblob.o libserioblob.so serio.o serio
>>
>> g++ -I/home/mecklen/work/boost-install/include/boost-1_36
>> serioblob.cpp -c -o serioblob.o
>>
>> g++ -g -ftrapv -DBOOST_1_36_0
>> -I/home/mecklen/work/boost-install/include/boost-1_36 -DUSE_TRAPV
>> -rdynamic -shared serioblob.o
>> -L/home/mecklen/work/boost-install/lib/
>> -lboost_serialization-gcc42-mt -o libserioblob.so
>>
>> g++ -I/home/mecklen/work/boost-install/include/boost-1_36 serio.cpp
>> -c -o serio.o
>>
>> g++ -g -ftrapv -DBOOST_1_36_0
>> -I/home/mecklen/work/boost-install/include/boost-1_36 -DUSE_TRAPV
>> -rdynamic serio.o libserioblob.so
>> /home/mecklen/work/boost-install/lib/libboost_unit_test_framework-gcc42-mt.so
>> -L/home/mecklen/work/boost-install/lib/
>> -lboost_serialization-gcc42-mt -o serio
>>
>> export
>> LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/mecklen/work/boost-install/lib:.
>> ./serio --catch_system_errors=no
>>
>
>
>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net