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

Reply via email to