1
0
Fork 0

#1291, hang on exit with OSG threading.

Explicitly stop threading during shutdown, before destroying various
rendering / viewer related structures.
This commit is contained in:
James Turner 2014-01-04 16:10:42 +00:00
parent 580a7f07dd
commit 9e773e85f8

View file

@ -212,12 +212,22 @@ FGGlobals::~FGGlobals()
subsystem_mgr->remove("model-manager"); subsystem_mgr->remove("model-manager");
_tile_mgr.clear(); _tile_mgr.clear();
osg::ref_ptr<osgViewer::Viewer> vw(renderer->getViewer());
if (vw) {
// https://code.google.com/p/flightgear-bugs/issues/detail?id=1291
// explicitly stop trheading before we delete the renderer or
// viewMgr (which ultimately holds refs to the CameraGroup, and
// GraphicsContext)
vw->stopThreading();
}
// don't cancel the pager until after shutdown, since AIModels (and // don't cancel the pager until after shutdown, since AIModels (and
// potentially others) can queue delete requests on the pager. // potentially others) can queue delete requests on the pager.
if (renderer->getViewer() && renderer->getViewer()->getDatabasePager()) { if (vw && vw->getDatabasePager()) {
renderer->getViewer()->getDatabasePager()->cancel(); vw->getDatabasePager()->cancel();
renderer->getViewer()->getDatabasePager()->clear(); vw->getDatabasePager()->clear();
} }
osgDB::Registry::instance()->clearObjectCache(); osgDB::Registry::instance()->clearObjectCache();
// renderer touches subsystems during its destruction // renderer touches subsystems during its destruction
@ -226,7 +236,8 @@ FGGlobals::~FGGlobals()
_chatter_queue.clear(); _chatter_queue.clear();
delete subsystem_mgr; delete subsystem_mgr;
subsystem_mgr = NULL; // important so ::get_subsystem returns NULL subsystem_mgr = NULL; // important so ::get_subsystem returns NULL
vw = 0; // don't delete the viewer until now
delete time_params; delete time_params;
set_matlib(NULL); set_matlib(NULL);