Hi Steve, Crashes in the DatabasePager can be very hard to pin down. A group of us worked hard in the spring to nail all the potential problem points in the DatabasePager/osgTerrain/core OSG, we used 3rd party analysis tools to help in this and got things working robustly. One problem area weren't able to clean up was NVidia driver problems under Windows that related to VBO management, at the suggestion of NVidia changing the profile to "visual simulation" cleaned up the remaining issues.
As for osgViewer::ComposterVewer and osgViewer::Viewer, essentially they will be the same under the hood, it's only the high level Camera setup and event handling that is different, all the threading implementation is shared between them. However, with threading problems it can be very hard to reproduce reliably, sometimes what really are irrelevant changes make issues appear/disappear so seem to be relevant. Robert. On Thu, Oct 13, 2011 at 4:20 PM, Steve Ashley <[email protected]> wrote: > Hello all, > > I'm getting a consistent crash in the DatabasePager thread in our > application. I'll post the callstack and some information: > > Windows XP OS with VS 2005, uising OSG 3.0.1 with an appx. 35Gb .ive terrain > built with the latest VPB against OSG 3.0.1. I've also got the same crash to > happen for terrains built against 2.9.8 and 2.9.9, one of which is much > smaller. > > Just yesterday, I loaded this same terrain into the osgcompositeviewerd > example app, and got the same crash in the same location. So, I think it's a > problem in the DatabasePager and perhaps not something we're doing in our > app, or possibly a problem with how VPB is building the terrain. > > A few times this crash has occured in as little as 10 minutes, however most > times it seems to take 45min to 2hours+ to occur. I tilted the terrains in > the bottom two views of the sample app to try and get as many tiles in view > as possible and then tried to slowly spin them around so they would keep > paging in and out tiles and I also spun the flaming Cessna. I've gotten it > twice so far in osgcompostiteviewerd, in the same spot. Also, I have gotten > it to occur in our app with only a single view and a single DatabasePager > thread, so I don't think it's an issue with multiple DatabasePager threads. > > Here is the callstack: > > > osg80-osgd.dll!std::_Vector_const_iterator<osg::ref_ptr<osg::Node>,std::allocator<osg::ref_ptr<osg::Node> > > >::operator++() Line 117 + 0x33 bytes C++ > > osg80-osgd.dll!std::_Vector_iterator<osg::ref_ptr<osg::Node>,std::allocator<osg::ref_ptr<osg::Node> > > >::operator++() Line 337 C++ > osg80-osgd.dll!osg::Group::traverse(osg::NodeVisitor & nv={...}) Line > 60 + 0x8 bytes C++ > osg80-osgd.dll!osg::NodeVisitor::traverse(osg::Node & node={...}) > Line 193 + 0x1c bytes C++ > osg80-osgUtild.dll!osgUtil::StateToCompile::apply(osg::Node & > node={...}) Line 70 + 0xf bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::Group & node={...}) Line > 86 + 0x13 bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::Transform & node={...}) > Line 121 + 0x13 bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::MatrixTransform & > node={...}) Line 136 + 0x13 bytes C++ > osg80-osgd.dll!osg::MatrixTransform::accept(osg::NodeVisitor & > nv={...}) Line 37 + 0x41 bytes C++ >> >> osg80-osgTerraind.dll!osgTerrain::GeometryTechnique::traverse(osg::NodeVisitor >> & nv={...}) Line 1488 + 0x47 bytes C++ > > osg80-osgTerraind.dll!osgTerrain::TerrainTile::traverse(osg::NodeVisitor & > nv={...}) Line 159 + 0x24 bytes C++ > osg80-osgd.dll!osg::NodeVisitor::traverse(osg::Node & node={...}) > Line 193 + 0x1c bytes C++ > osg80-osgUtild.dll!osgUtil::StateToCompile::apply(osg::Node & > node={...}) Line 70 + 0xf bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::Group & node={...}) Line > 86 + 0x13 bytes C++ > osg80-osgTerraind.dll!osgTerrain::TerrainTile::accept(osg::NodeVisitor > & nv={...}) Line 76 + 0x55 bytes C++ > osg80-osgd.dll!osg::NodeAcceptOp::operator()(osg::ref_ptr<osg::Node> > node={...}) Line 358 + 0x5e bytes C++ > > osg80-osgd.dll!std::for_each<std::_Vector_iterator<osg::ref_ptr<osg::Node>,std::allocator<osg::ref_ptr<osg::Node> > > > >,osg::NodeAcceptOp>(std::_Vector_iterator<osg::ref_ptr<osg::Node>,std::allocator<osg::ref_ptr<osg::Node> > > > _First={_ptr=0x098306b0 }, > std::_Vector_iterator<osg::ref_ptr<osg::Node>,std::allocator<osg::ref_ptr<osg::Node> > > > _Last={_ptr=0xfdfdfdfd }, osg::NodeAcceptOp _Func={...}) Line 29 + 0x1f > bytes C++ > osg80-osgd.dll!osg::PagedLOD::traverse(osg::NodeVisitor & nv={...}) > Line 136 + 0x6c bytes C++ > osg80-osgd.dll!osg::NodeVisitor::traverse(osg::Node & node={...}) > Line 193 + 0x1c bytes C++ > osg80-osgUtild.dll!osgUtil::StateToCompile::apply(osg::Node & > node={...}) Line 70 + 0xf bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::Group & node={...}) Line > 86 + 0x13 bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::LOD & node={...}) Line > 156 + 0x13 bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::PagedLOD & node={...}) > Line 161 + 0x13 bytes C++ > osg80-osgd.dll!osg::PagedLOD::accept(osg::NodeVisitor & nv={...}) > Line 32 + 0x41 bytes C++ > osg80-osgd.dll!osg::Group::traverse(osg::NodeVisitor & nv={...}) Line > 62 + 0x25 bytes C++ > osg80-osgd.dll!osg::NodeVisitor::traverse(osg::Node & node={...}) > Line 193 + 0x1c bytes C++ > osg80-osgUtild.dll!osgUtil::StateToCompile::apply(osg::Node & > node={...}) Line 70 + 0xf bytes C++ > osg80-osgd.dll!osg::NodeVisitor::apply(osg::Group & node={...}) Line > 86 + 0x13 bytes C++ > osg80-osgd.dll!osg::Group::accept(osg::NodeVisitor & nv={...}) Line > 38 + 0x41 bytes C++ > osg80-osgDBd.dll!osgDB::DatabasePager::DatabaseThread::run() Line 886 > + 0x2d bytes C++ > > ot12-OpenThreadsd.dll!OpenThreads::ThreadPrivateActions::StartThread(void * > data=0x0207bed4) Line 113 + 0xf bytes C++ > msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C > msvcr80d.dll!_threadstartex(void * ptd=0x052c2e30) Line 331 C > kernel32.dll!7c80b729() > [Frames below may be incorrect and/or missing, no symbols loaded for > kernel32.dll] > ntdll.dll!7c910222() > > > In the osgTerrain::TerrainTile::traverse call some info on the node > visitor(nv): > > > osg80-osgTerraind.dll!osgTerrain::TerrainTile::traverse(osg::NodeVisitor & > nv={...}) Line 159 + 0x24 bytes C++ > > - nv {_visitorType=NODE_VISITOR > _traversalNumber=4294967295 _frameStamp={...} ...} osg::NodeVisitor & > + osg::Referenced {_observerSet={...} _refCount={...} } > osg::Referenced > + __vfptr 0x010d874c const > osgDB::DatabasePager::FindCompileableGLObjectsVisitor::`vftable'{for > `osg::NodeVisitor'} * > _visitorType NODE_VISITOR osg::NodeVisitor::VisitorType > _traversalNumber 4294967295 unsigned int > + _frameStamp {_ptr=0x00000000 } > osg::ref_ptr<osg::FrameStamp> > _traversalMode TRAVERSE_ALL_CHILDREN > osg::NodeVisitor::TraversalMode > _traversalMask 4294967295 unsigned int > _nodeMaskOverride 0 unsigned int > - _nodePath [4](0x09830440 > {_children=[4]({_ptr=0x09830518 },{_ptr=0x094a8670 },{_ptr=0x08d229c0 > },{_ptr=0x086f9228 }) },0x09830518 {_databaseOptions={...} > _databasePath="sat_root_L0_X0_Y0/" _frameNumberOfLastTraversal=0 > ...},0x098306b0 {_terrain=0x020641c8 _dirtyMask=0 _hasBeenTraversal=true > ...},0x091fd2e8 {_contextID=0 _glObjectID=483 _profile={...} ...}) > std::vector<osg::Node *,std::allocator<osg::Node *> > > + [0] 0x09830440 {_children=[4]({_ptr=0x09830518 > },{_ptr=0x094a8670 },{_ptr=0x08d229c0 },{_ptr=0x086f9228 }) } > osg::Node * > - [1] 0x09830518 {_databaseOptions={...} > _databasePath="sat_root_L0_X0_Y0/" _frameNumberOfLastTraversal=0 ...} > osg::Node * > - [osg::PagedLOD] {_databaseOptions={...} > _databasePath="sat_root_L0_X0_Y0/" _frameNumberOfLastTraversal=0 ...} > osg::PagedLOD > + osg::LOD {_centerMode=USER_DEFINED_CENTER > _userDefinedCenter={...} _radius=-1.0000000 ...} osg::LOD > + _databaseOptions {_ptr=0x00000000 } > osg::ref_ptr<osg::Referenced> > + _databasePath "sat_root_L0_X0_Y0/" > std::basic_string<char,std::char_traits<char>,std::allocator<char> > > _frameNumberOfLastTraversal 0 unsigned int > _numChildrenThatCannotBeExpired 0 unsigned int > _disableExternalChildrenPaging false bool > - _perRangeDataList [2]({_filename="" > _priorityOffset=0.00000000 _priorityScale=1.0000000 > ...},{_filename="sat_L5_X23_Y14_subtile.ive" _priorityOffset=0.00000000 > _priorityScale=1.0000000 ...}) > std::vector<osg::PagedLOD::PerRangeData,std::allocator<osg::PagedLOD::PerRangeData> > > > + [0] {_filename="" _priorityOffset=0.00000000 > _priorityScale=1.0000000 ...} osg::PagedLOD::PerRangeData > + [1] {_filename="sat_L5_X23_Y14_subtile.ive" > _priorityOffset=0.00000000 _priorityScale=1.0000000 ...} > osg::PagedLOD::PerRangeData > > I did verify the terrain tile in there was valid and viewable in osgviewer. > I'm going to start looking now to see if it's not only the same code location > crash, but also tiles involved. > > Also, I have tried setting some things in our app on the DatabasePager such > as turning off caching, setting the unref image after apply policy to false, > setting do pre compile to false and still get the same results. > > I have seen some threads in the past addressing DatabasePager thread issues, > but perhaps this bug has been still lurking because it can take a long time > to appear in most cases. > > Any ideas or suggestions would be greatly appreciated. Thanks. > > Steve > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=43400#43400 > > > > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

