From: Christopher John Purnell Date: Tue, 9 Sep 2003 17:50:31 +0000 (+0000) Subject: More to fix a deinitialization related crash. X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=d3a7931b13fa9b9c343b1859fffe6433e64fc24c;p=freeglut More to fix a deinitialization related crash. git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@180 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/freeglut_main.c b/src/freeglut_main.c index bdfe139..34c3f79 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -399,67 +399,6 @@ void fgWarning( const char *fmt, ... ) va_end( ap ); } -/* - * Clean up on exit - */ -static void fgCleanUpGlutsMess( void ) -{ - int i; - - i = 0; - - if ( fgStructure.Windows.First != NULL ) - { - SFG_Window *win = (SFG_Window *)fgStructure.Windows.First ; - glEnd(); - glFinish(); - glFlush(); - while ( win != NULL ) - { - SFG_Window *temp_win = (SFG_Window *)win->Node.Next ; - fgDestroyWindow ( win, FALSE ) ; - win = temp_win ; - } - } - -#if 0 - /* these are pointers to external handles */ - - __glutWindowListSize = 0; - __glutStaleWindowList = NULL; - __glutWindowList = NULL; - __glutCurrentWindow = NULL; - - /* make sure we no longer have a GL context */ - - if ( wglGetCurrentContext() != NULL ) - { - wglDeleteContext( wglGetCurrentContext() ); - } - - hInstance = GetModuleHandle(NULL); - UnregisterClass( classname, hInstance ); - - /* clean up allocated timer memory */ - - tList = __glutTimerList; - i = 0; - - while ( __glutTimerList ) - { - i++; - tList = __glutTimerList; - - if ( __glutTimerList ) - __glutTimerList = __glutTimerList->next; - - if ( tList ) - free( tList ); - } -#endif -} - - /* -- INTERFACE FUNCTIONS -------------------------------------------------- */ /* @@ -1180,23 +1119,21 @@ void FGAPIENTRY glutMainLoop( void ) fgState.ExecState = GLUT_EXEC_STATE_STOP ; } + { + fgExecutionState execState = fgState.ActionOnWindowClose; - /* - * If we got here by the user closing a window or by the application closing down, there may still be windows open. - */ - fgCleanUpGlutsMess () ; - - /* - * Check whether we return to the calling program or simply exit - */ - if ( fgState.ActionOnWindowClose == GLUT_ACTION_EXIT ) - exit ( 0 ) ; + /* + * When this loop terminates, destroy the display, state and structure + * of a freeglut session, so that another glutInit() call can happen + */ + fgDeinitialize(); - /* - * When this loop terminates, destroy the display, state and structure - * of a freeglut session, so that another glutInit() call can happen - */ - fgDeinitialize(); + /* + * Check whether we return to the calling program or simply exit + */ + if ( execState == GLUT_ACTION_EXIT ) + exit ( 0 ) ; + } } /*