[serialization] extended_type_info.cpp: assert(lookup(eti) == m_self->m_map.end());

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 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@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@1 (l@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 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGhOtUdnooMonJSYkRAnhWAJ0cQPXyO7IZ2g6X5HNG55CzqFppBACfZDU6 3XpX5bmP0yqrFTrAyntWBIs= =0SAJ -----END PGP SIGNATURE-----

-----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@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@1 (l@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-----
participants (1)
-
Markus Bernhardt