X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fb3e83b60a5eeb499bb2934ce4fa0f0cdff5fbec..c1ce7c198801c1766083a245874f07ea20b16407:/src/common/init.cpp diff --git a/src/common/init.cpp b/src/common/init.cpp index 774cbd2273..aaa186cc16 100644 --- a/src/common/init.cpp +++ b/src/common/init.cpp @@ -181,6 +181,7 @@ static void ConvertArgsToUnicode(int argc, char **argv) gs_initData.argv[i] = wxStrdup(wxConvLocal.cMB2WX(argv[i])); } + gs_initData.argc = argc; gs_initData.argv[argc] = NULL; } @@ -195,6 +196,7 @@ static void FreeConvertedArgs() delete [] gs_initData.argv; gs_initData.argv = NULL; + gs_initData.argc = 0; } } @@ -310,26 +312,26 @@ bool wxEntryStart(int& argc, char **argv) // clean up // ---------------------------------------------------------------------------- -// cleanup done before destroying wxTheApp +// cleanup done before destroying wxTheApp static void DoCommonPreCleanup() { #if wxUSE_LOG // flush the logged messages if any and install a 'safer' log target: the // default one (wxLogGui) can't be used after the resources are freed just // below and the user supplied one might be even more unsafe (using any - // wxWindows GUI function is unsafe starting from now) + // wxWidgets GUI function is unsafe starting from now) wxLog::DontCreateOnDemand(); // this will flush the old messages if any delete wxLog::SetActiveTarget(new wxLogStderr); #endif // wxUSE_LOG - - wxModule::CleanUpModules(); } // cleanup done after destroying wxTheApp static void DoCommonPostCleanup() { + wxModule::CleanUpModules(); + wxClassInfo::CleanUp(); // we can't do this in wxApp itself because it doesn't know if argv had @@ -338,16 +340,7 @@ static void DoCommonPostCleanup() FreeConvertedArgs(); #endif // wxUSE_UNICODE - // check for memory leaks -#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT - if (wxDebugContext::CountObjectsLeft(TRUE) > 0) - { - wxLogDebug(wxT("There were memory leaks.\n")); - wxDebugContext::Dump(); - wxDebugContext::PrintStatistics(); - } -#endif // Debug - + // Note: check for memory leaks is now done via wxDebugContextDumpDelayCounter #if wxUSE_LOG // and now delete the last logger as well delete wxLog::SetActiveTarget(NULL); @@ -396,6 +389,7 @@ int wxEntryReal(int& argc, wxChar **argv) wxTRY { + // app initialization if ( !wxTheApp->CallOnInit() ) { @@ -403,13 +397,17 @@ int wxEntryReal(int& argc, wxChar **argv) return -1; } - // app execution - int retValue = wxTheApp->OnRun(); + // ensure that OnExit() is called if OnInit() had succeeded + class CallOnExit + { + public: + ~CallOnExit() { wxTheApp->OnExit(); } + } callOnExit; - // app clean up - wxTheApp->OnExit(); + WX_SUPPRESS_UNUSED_WARN(callOnExit); - return retValue; + // app execution + return wxTheApp->OnRun(); } wxCATCH_ALL( wxTheApp->OnUnhandledException(); return -1; ) }