1
0
Fork 0

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.
This commit is contained in:
James Turner 2014-01-04 17:27:55 +00:00
parent 9e773e85f8
commit 448539a6b9

View file

@ -50,6 +50,9 @@
#include <simgear/compiler.h>
#include <simgear/structure/exception.hxx>
#include <osg/Texture>
#include <osg/BufferObject>
#include <cstring>
#include <iostream>
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;