Boost logo

Boost Users :

From: Markus Bernhardt (Markus.Bernhardt_at_[hidden])
Date: 2007-06-29 11:37:41


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

sorry for the noise ;-(

Everything is correct. The problem is caused by a template which is
compiled twice by the compiler.

   - markus

Markus Bernhardt schrieb:
> Hi everyone,
>
> I'm using serialization for quite a while now. Everything worked for me.
> Now I added some classes to serialization and one off my classes causes
> an assertion. This happens with 1.32.0 and 1.34.0. I'm quite sure my
> code is broken, but I can't find it.
>
> Therefore I was debugging and it looks weird.
>
> 1. OS: Solaris 10
> CC: Sun C++ 5.8 Patch 121018-10 2007/02/21 (latest patch level)
> Reproducable under Sparc and x86
>
> 2. The programm crashes on startup:
>
> (dbx) where
> current thread: t_at_1
> [1] __lwp_kill(0x1, 0x6, 0xfffffe8200db3500, 0x3, 0xfffffd7fffdff2a0,
> 0xfffffd7fff3c73a0), at 0xfffffd7ffd7fe81a
> [2] _thr_kill(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffd7f9803
> [3] raise(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffd7a7849
> [4] abort(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffd78a7e0
> [5] __assert(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffd78aa6e
> =>[6] boost::serialization::detail::tkmap::insert(eti =
> 0xfffffd7fff357540), line 78 in "extended_type_info.cpp"
> [7] boost::serialization::extended_type_info::self_register(this =
> 0xfffffd7fff357540), line 231 in "extended_type_info.cpp"
> [8] boost::serialization::detail::extended_type_info_typeid_1<const
> de::scmb::bm::core::SyncedRedoableWriteCommand<de::scmb::bm::core::Instance>
>>> ::extended_type_info_typeid_1(this = 0xfffffd7fff357540), line 77 in
> "extended_type_info_typeid.hpp"
> [9] boost::serialization::detail::extended_type_info_typeid_1<const
> de::scmb::bm::core::SyncedRedoableWriteCommand<de::scmb::bm::core::Instance>
>>> ::get_instance(), line 96 in "extended_type_info_typeid.hpp"
> [10]
> boost::archive::detail::pointer_oserializer<de::scmb::bm::core::SyncedRedoableWriteCommand<de::scmb::bm::core::Instance>,boost::archive::binary_oarchive>::pointer_oserializer(this
> = 0xfffffd7fff3576b8), line 234 in "oserializer.hpp"
> [11] __SLIP.INIT_E(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7fff2db3bf
> [12] __STATIC_CONSTRUCTOR(), line 197 in "oserializer.hpp"
> [13] __cplus_fini_at_exit(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at
> 0xfffffd7fff320fd2
> [14] call_init(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7fff3d278a
> [15] setup(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7fff3d1491
> [16] _setup(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7fff3ded6f
> [17] _rt_boot(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7fff3c717f
>
> 3. The assertion is: assert(lookup(eti) == m_self->m_map.end());
>
> (dbx) print -r lookup(eti)
> lookup(eti) = {
> _Rb_tree_iterator<const
> boost::serialization::extended_type_info*,std::_Const_traits<const
> boost::serialization::extended_type_info*>
>>> ::_Rb_tree_base_iterator::_M_node = (nil)
> }
>
> (dbx) print -r m_self->m_map.end()
> m_self->m_map.end() = {
> _Rb_tree_iterator<const
> boost::serialization::extended_type_info*,std::_Const_traits<const
> boost::serialization::extended_type_info*>
>>> ::_Rb_tree_base_iterator::_M_node = (nil)
> }
>
> Why the assertion is triggered ???
> Both sides are "(nil)".
>
> 4. To get a better understanding I added a trace to extended_type_info.cpp:
>
> insert(const extended_type_info * eti){
> if(NULL == m_self){
> static tkmap instance;
> m_self = & instance;
> }
>
> // markus
> std::cout
> << eti->m_type_info_key
> << ": "
> << &(eti->m_type_info_key)
> << std::endl;
>
> // make sure that attempt at registration is done only once
> assert(lookup(eti) == m_self->m_map.end());
> m_self->m_map.insert(eti);
> }
>
> The result confuses me even more:
>
> (dbx) run
> Running: bm_instd
> (process id 22999)
> extended_type_info_typeid: 0xfffffd7ffe5467b8
> extended_type_info_typeid: 0xfffffd7ffe546808
> extended_type_info_typeid: 0xfffffd7ffe546858
> extended_type_info_typeid: 0xfffffd7ffe5468a8
> extended_type_info_typeid: 0xfffffd7ffe5468f8
> extended_type_info_typeid: 0xfffffd7ffe546948
> extended_type_info_typeid: 0xfffffd7ffe546998
> extended_type_info_typeid: 0xfffffd7ffe5469e8
> extended_type_info_typeid: 0xfffffd7ffe546a38
> extended_type_info_typeid: 0xfffffd7ffe546a88
> extended_type_info_typeid: 0xfffffd7ffe546ad8
> extended_type_info_typeid: 0xfffffd7ffe546b28
> extended_type_info_typeid: 0xfffffd7ffe546b78
> extended_type_info_typeid: 0xfffffd7ffe546bc8
> extended_type_info_typeid: 0xfffffd7ffe546c18
> extended_type_info_typeid: 0xfffffd7ffe546c68
> extended_type_info_typeid: 0xfffffd7ffe546cb8
> extended_type_info_typeid: 0xfffffd7ffe54b2d8
> extended_type_info_typeid: 0xfffffd7ffe54b750
> extended_type_info_typeid: 0xfffffd7ffe54bc58
> extended_type_info_typeid: 0xfffffd7ffe54b700
> extended_type_info_typeid: 0xfffffd7ffe54b970
> extended_type_info_typeid: 0xfffffd7ffe54bac0
> extended_type_info_typeid: 0xfffffd7ffe54c270
> extended_type_info_typeid: 0xfffffd7ffe54bba8
> extended_type_info_typeid: 0xfffffd7ffe54d4e8
> extended_type_info_typeid: 0xfffffd7ffe54d180
> extended_type_info_typeid: 0xfffffd7ffe54e5a8
> extended_type_info_typeid: 0xfffffd7ffe54e5f8
> extended_type_info_typeid: 0xfffffd7ffe54e648
> extended_type_info_typeid: 0xfffffd7ffe550778
> extended_type_info_typeid: 0xfffffd7ffe551870
> extended_type_info_typeid: 0xfffffd7ffe5521d0
> extended_type_info_typeid: 0xfffffd7ffe5529a8
> extended_type_info_typeid: 0xfffffd7ffe553180
> extended_type_info_typeid: 0xfffffd7ffe553958
> extended_type_info_typeid: 0xfffffd7ffe554130
> extended_type_info_typeid: 0xfffffd7ffe554908
> extended_type_info_typeid: 0xfffffd7ffe5550e0
> extended_type_info_typeid: 0xfffffd7ffe5558b8
> extended_type_info_typeid: 0xfffffd7ffe556090
> extended_type_info_typeid: 0xfffffd7ffe556868
> extended_type_info_typeid: 0xfffffd7ffe5581f0
> extended_type_info_typeid: 0xfffffd7ffe558670
> extended_type_info_typeid: 0xfffffd7ffe558238
> extended_type_info_typeid: 0xfffffd7ffe558a48
> extended_type_info_typeid: 0xfffffd7ffe558ac0
> extended_type_info_typeid: 0xfffffd7ffe559108
> extended_type_info_typeid: 0xfffffd7fff357598
> extended_type_info_typeid: 0xfffffd7fff357548
> Assertion failed: lookup(eti) == m_self->m_map.end(), file
> libs/serialization/src/extended_type_info.cpp, line 78
> t_at_1 (l_at_1) signal ABRT (Abbrechen) in __lwp_kill at 0xfffffd7ffd7fe81a
> 0xfffffd7ffd7fe81a: __lwp_kill+0x000a: jae __lwp_kill+0x18
> [ 0xfffffd7ffd7fe828, .+0xe ]
> Current function is boost::serialization::detail::tkmap::insert
> 78 assert(lookup(eti) == m_self->m_map.end());
>
> If I understand that right, it looks like
> extended_type_info_typeid: 0xfffffd7fff357548
> is already in the map. How can that be?
>
> I think I'm completely missing the point at the moment. Can anyone
> suggest me where to look for the problem?
>
> Any comments are greatly appreciated.
>
> - markus
>
> --
> Software Consulting
> Markus Bernhardt GmbH
> Spieljochstr. 34
> 81825 München
>
> Fon: +49-89-420903-14
> Fax: +49-89-420903-20
> www: http://www.scmb.de
>
> Geschäftsführung Markus Bernhardt
> Handelsregister AG München HRB 125966
> USt-Id DE201885231
>

- --
Software Consulting
Markus Bernhardt GmbH
Spieljochstr. 34
81825 München

Fon: +49-89-420903-14
Fax: +49-89-420903-20
www: http://www.scmb.de

Geschäftsführung Markus Bernhardt
Handelsregister AG München HRB 125966
USt-Id DE201885231

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFGhSdEdnooMonJSYkRAsMZAJ4wFHTGOgQMnKIYe2o1iHyAYP9d9ACeK90k
zB70j4pJe/kQvm3B70eKBzc=
=eW8l
-----END PGP SIGNATURE-----


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