There seems to be a problem with the destruction order for the static
objects in OpenSceneGraph. At program termination when executing in debug
mode, I get a mutex lock error in the destructor for
"s_renderBinPrototypeList" (osgUtil/RenderBin.cpp line 44). This error is
caused by the static mutex "s_ReferencedGlobalMutext" (osg/Referenced.cpp
line 82) already being destructed prior to the destruction of
"s_renderBinPrototypeList".
Is this a known problem and/or does anyone have suggestions on how to
resolve it? I've already tried changing the link-order of the osg/osgutil
libraries, but this does not seem to make any difference.
Configuration:
OSG 2.8.1, built with static OSG and OT libs. on MS visual C++ 9/2008 SP1.
Thanks in advance,
Fredrik Orderud
Rctl3dApp.exe!OpenThreads::Mutex::lock() Line 111 + 0xc bytes C++
Rctl3dApp.exe!OpenThreads::ScopedPointerLock<OpenThreads::Mutex>::ScopedPointerLock<OpenThreads::Mutex>(OpenThreads::Mutex
* m=0x01543ef8) Line 54 + 0x34 bytes C++
Rctl3dApp.exe!osg::StateAttribute::removeParent(osg::StateSet *
object=0x03d2eb58) Line 38 + 0x11 bytes C++
Rctl3dApp.exe!osg::StateSet::clear() Line 552 + 0x1d bytes C++
Rctl3dApp.exe!osg::StateSet::~StateSet() Line 173 C++
Rctl3dApp.exe!osg::StateSet::`scalar deleting destructor'() + 0x16
bytes C++
Rctl3dApp.exe!osg::Referenced::unref() Line 176 + 0x35 bytes C++
Rctl3dApp.exe!osg::ref_ptr<osg::StateSet>::~ref_ptr<osg::StateSet>()
Line 33 + 0x20 bytes C++
Rctl3dApp.exe!osgUtil::RenderBin::~RenderBin() Line 173 + 0xe bytes
C++
Rctl3dApp.exe!osgUtil::RenderBin::`scalar deleting destructor'() +
0x16 bytes C++
Rctl3dApp.exe!osg::Referenced::unref() Line 176 + 0x35 bytes C++
Rctl3dApp.exe!osg::ref_ptr<osgUtil::RenderBin>::~ref_ptr<osgUtil::RenderBin>()
Line 33 + 0x20 bytes C++
Rctl3dApp.exe!std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const
,osg::ref_ptr<osgUtil::RenderBin> >::~pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> const ,osg::ref_ptr<osgUtil::RenderBin> >() + 0x40 bytes C++
Rctl3dApp.exe!std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> >
>,0> >::_Node::~_Node() + 0x19 bytes C++
Rctl3dApp.exe!std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> >
>,0> >::_Node::`scalar deleting destructor'() + 0x16 bytes C++
Rctl3dApp.exe!std::_Destroy<std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const
,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::_Node>(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const
,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::_Node * _Ptr=0x03d2f618) Line 60 C++
Rctl3dApp.exe!std::allocator<std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const
,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::_Node>::destroy(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const
,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::_Node * _Ptr=0x03d2f618) Line 160 + 0x9 bytes C++
Rctl3dApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
const ,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::_Erase(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
const ,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::_Node * _Rootnode=0x03d2f618) Line 1172 C++
Rctl3dApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> >
>,0> >::clear() Line 972 C++
Rctl3dApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::const_iterator
_First=("DepthSortedBin",{_ptr=0x03d2ea28 }), std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::const_iterator _Last=(<Bad Ptr>,{_ptr=0xcdcdcdcd })) Line 938 C++
Rctl3dApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> >
>,0> >::_Tidy() Line 1421 + 0x77 bytes C++
Rctl3dApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
const ,osg::ref_ptr<osgUtil::RenderBin> > >,0> >::~_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
const ,osg::ref_ptr<osgUtil::RenderBin> > >,0> >() Line 541 C++
Rctl3dApp.exe!std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> > >
>::~map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,osg::ref_ptr<osgUtil::RenderBin>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,osg::ref_ptr<osgUtil::RenderBin> > > >() + 0x16 bytes C++
Rctl3dApp.exe!RenderBinPrototypeList::~RenderBinPrototypeList() Line
34 + 0x48 bytes C++
Rctl3dApp.exe!RenderBinPrototypeList::`scalar deleting destructor'() +
0x16 bytes C++
Rctl3dApp.exe!osg::Referenced::unref() Line 176 + 0x35 bytes C++
Rctl3dApp.exe!osg::ref_ptr<RenderBinPrototypeList>::~ref_ptr<RenderBinPrototypeList>()
Line 33 + 0x20 bytes C++
Rctl3dApp.exe!`renderBinPrototypeList'::`2'::`dynamic atexit destructor
for 's_renderBinPrototypeList''() + 0xd bytes C++
msvcr90d.dll!doexit(int code=0, int quick=0, int retcaller=0) Line 591
C
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org