From 448539a6b93d141313424425ffb4276c6d821759 Mon Sep 17 00:00:00 2001 From: James Turner Date: Sat, 4 Jan 2014 17:27:55 +0000 Subject: [PATCH] Fix crash: Quit via Cmd-Q on Mac. Tweak static-init order of some OSG objects, so they are valid when fg_terminate runs, and hence orderly shutdown in possible. --- src/Main/bootstrap.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Main/bootstrap.cxx b/src/Main/bootstrap.cxx index be6c595b5..fe988d7e3 100644 --- a/src/Main/bootstrap.cxx +++ b/src/Main/bootstrap.cxx @@ -50,6 +50,9 @@ #include #include +#include +#include + #include #include using std::cerr; @@ -209,6 +212,12 @@ int main ( int argc, char **argv ) // is possible inside fgExitCleanup sglog(); + // similar to above, ensure some static maps inside OSG exist before + // we register our at-exit handler, otherwise the statics are gone + // when fg_terminate runs, which causes crashes. + osg::Texture::getTextureObjectManager(0); + osg::GLBufferObjectManager::getGLBufferObjectManager(0); + std::set_terminate(fg_terminate); atexit(fgExitCleanup); if (fgviewer) @@ -243,9 +252,12 @@ int main ( int argc, char **argv ) // so OpenAL device and context are released cleanly void fgExitCleanup() { - if (_bootstrap_OSInit != 0) + if (_bootstrap_OSInit != 0) { fgSetMouseCursor(MOUSE_CURSOR_POINTER); + fgOSCloseWindow(); + } + // on the common exit path globals is already deleted, and NULL, // so this only happens on error paths. delete globals;