]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/bootstrap.cxx
Remove confusing reference to SDL/GLUT
[flightgear.git] / src / Main / bootstrap.cxx
index f305b345bf889fd6915f2213a8081653395ba198..2aef4c2c0896efe6f021ef54c021468a27c2f639 100644 (file)
@@ -129,33 +129,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 }
 #endif
 
-#if defined( sgi )
-#include <sys/fpu.h>
-#include <sys/sysmp.h>
-#include <unistd.h>
-
-/*
- *  set the special "flush zero" bit (FS, bit 24) in the Control Status
- *  Register of the FPU of R4k and beyond so that the result of any
- *  underflowing operation will be clamped to zero, and no exception of
- *  any kind will be generated on the CPU.  This has no effect on an
- *  R3000.
- */
-void flush_fpe(void)
-{
-    union fpc_csr f;
-    f.fc_word = get_fpc_csr();
-    f.fc_struct.flush = 1;
-    set_fpc_csr(f.fc_word);
-}
-#endif
-
 static void fg_terminate() {
     cerr << endl <<
-            "Uncaught Exception: you should see a meaningful error message\n"
-            "here, but your GLUT (or SDL) library was apparently compiled\n"
-            "and/or linked without exception support. Please complain to\n"
-            "its provider!"
+            "Uncaught Exception: missing exception handler on some thread"
             << endl << endl;
     abort();
 }
@@ -201,30 +177,12 @@ int main ( int argc, char **argv )
     initFPE();
 #endif
 
-#if defined(sgi)
-    flush_fpe();
-
-    // Bind all non-rendering threads to CPU1
-    // This will reduce the jitter caused by them to an absolute minimum,
-    // but it will only work with superuser authority.
-    if ( geteuid() == 0 )
-    {
-       sysmp(MP_CLOCK, 0);             // bind the timer only to CPU0
-       sysmp(MP_ISOLATE, 1 );          // Isolate CPU1
-       sysmp(MP_NONPREEMPTIVE, 1 );    // disable process time slicing on CPU1
-    }
-#endif
-
     // Enable floating-point exceptions for Windows
 #if defined( _MSC_VER ) && defined( DEBUG )
     // Christian, we should document what this does
     _control87( _EM_INEXACT, _MCW_EM );
 #endif
 
-#if defined( HAVE_BC5PLUS )
-    _control87(MCW_EM, MCW_EM);  /* defined in float.h */
-#endif
-  
     bool fgviewer = false;
     for (int i = 0; i < argc; ++i) {
         if (!strcmp("--fgviewer", argv[i])) {
@@ -236,6 +194,11 @@ int main ( int argc, char **argv )
     // FIXME: add other, more specific
     // exceptions.
     try {
+        // http://code.google.com/p/flightgear-bugs/issues/detail?id=1231
+        // ensure sglog is inited before atexit() is registered, so logging
+        // is possible inside fgExitCleanup
+        sglog();
+        
         std::set_terminate(fg_terminate);
         atexit(fgExitCleanup);
         if (fgviewer)
@@ -252,11 +215,14 @@ int main ( int argc, char **argv )
         if (std::strlen(t.getOrigin()) != 0)
             cerr << " (received from " << t.getOrigin() << ')' << endl;
 
+    } catch (const std::exception &e ) {
+        cerr << "Fatal error (std::exception): " << e.what() << endl;
+
     } catch (const std::string &s) {
-        cerr << "Fatal error: " << s << endl;
+        cerr << "Fatal error (std::string): " << s << endl;
 
     } catch (const char *s) {
-        cerr << "Fatal error: " << s << endl;
+        cerr << "Fatal error (const char*): " << s << endl;
 
     } catch (...) {
         cerr << "Unknown exception in the main loop. Aborting..." << endl;
@@ -274,6 +240,8 @@ void fgExitCleanup() {
     if (_bootstrap_OSInit != 0)
         fgSetMouseCursor(MOUSE_CURSOR_POINTER);
 
+    // on the common exit path globals is already deleted, and NULL,
+    // so this only happens on error paths.
     delete globals;
 }