diff options
| -rwxr-xr-x | indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 3 | ||||
| -rwxr-xr-x | indra/llcommon/llapp.cpp | 3 | ||||
| -rw-r--r-- | indra/llcommon/llcleanup.h | 30 | ||||
| -rwxr-xr-x | indra/llcommon/llcommon.cpp | 5 | ||||
| -rwxr-xr-x | indra/llcorehttp/tests/llcorehttp_test.cpp | 3 | ||||
| -rwxr-xr-x | indra/llcrashlogger/llcrashlogger.cpp | 3 | ||||
| -rwxr-xr-x | indra/llmessage/tests/llhttpclient_test.cpp | 3 | ||||
| -rwxr-xr-x | indra/llui/llui.cpp | 3 | ||||
| -rwxr-xr-x | indra/newview/llappviewer.cpp | 43 | ||||
| -rwxr-xr-x | indra/newview/llstartup.cpp | 3 | ||||
| -rwxr-xr-x | indra/newview/llviewermenu.cpp | 3 | ||||
| -rwxr-xr-x | indra/newview/llviewerobject.cpp | 11 | ||||
| -rwxr-xr-x | indra/newview/llviewerwindow.cpp | 7 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 3 | 
14 files changed, 83 insertions, 40 deletions
| diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 3d27b4a5b5..f4dba16a94 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -42,6 +42,7 @@  #include "lldiriterator.h"  #include "v4coloru.h"  #include "llsdserialize.h" +#include "llcleanup.h"  // system libraries  #include <iostream> @@ -634,7 +635,7 @@ int main(int argc, char** argv)  	}  	// Cleanup and exit -	LLImage::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLImage);  	if (fast_timer_log_thread)  	{  		fast_timer_log_thread->shutdown(); diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index 5a40845e7d..2c52b11594 100755 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -48,6 +48,7 @@  #include "lleventtimer.h"  #include "google_breakpad/exception_handler.h"  #include "stringize.h" +#include "llcleanup.h"  //  // Signal handling @@ -177,7 +178,7 @@ LLApp::~LLApp()  	if(mExceptionHandler != 0) delete mExceptionHandler; -	LLCommon::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLCommon);  }  // static diff --git a/indra/llcommon/llcleanup.h b/indra/llcommon/llcleanup.h new file mode 100644 index 0000000000..8eda9a7fb3 --- /dev/null +++ b/indra/llcommon/llcleanup.h @@ -0,0 +1,30 @@ +/** + * @file   llcleanup.h + * @author Nat Goodspeed + * @date   2015-05-20 + * @brief  Mechanism for cleaning up subsystem resources + *  + * $LicenseInfo:firstyear=2015&license=viewerlgpl$ + * Copyright (c) 2015, Linden Research, Inc. + * $/LicenseInfo$ + */ + +#if ! defined(LL_LLCLEANUP_H) +#define LL_LLCLEANUP_H + +#include "llerror.h" + +// Instead of directly calling SomeClass::cleanupClass(), use +// SUBSYSTEM_CLEANUP(SomeClass); +// This logs the call as well as performing it. That gives us a baseline +// subsystem shutdown order against which to compare subsequent dynamic +// shutdown schemes. +#define SUBSYSTEM_CLEANUP(CLASSNAME)                                    \ +    do {                                                                \ +        LL_INFOS("Cleanup") << "Calling " #CLASSNAME "::cleanupClass()" << LL_ENDL; \ +        CLASSNAME::cleanupClass();                                      \ +    } while (0) +// Use ancient do { ... } while (0) macro trick to permit a block of +// statements with the same syntax as a single statement. + +#endif /* ! defined(LL_LLCLEANUP_H) */ diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp index 19642b0982..439ff4e628 100755 --- a/indra/llcommon/llcommon.cpp +++ b/indra/llcommon/llcommon.cpp @@ -31,6 +31,7 @@  #include "llthread.h"  #include "lltrace.h"  #include "lltracethreadrecorder.h" +#include "llcleanup.h"  //static  BOOL LLCommon::sAprInitialized = FALSE; @@ -63,11 +64,11 @@ void LLCommon::cleanupClass()  	sMasterThreadRecorder = NULL;  	LLTrace::set_master_thread_recorder(NULL);  	LLThreadSafeRefCount::cleanupThreadSafeRefCount(); -	LLTimer::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLTimer);  	if (sAprInitialized)  	{  		ll_cleanup_apr();  		sAprInitialized = FALSE;  	} -	LLMemory::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLMemory);  } diff --git a/indra/llcorehttp/tests/llcorehttp_test.cpp b/indra/llcorehttp/tests/llcorehttp_test.cpp index e863ddd13f..19a20e663c 100755 --- a/indra/llcorehttp/tests/llcorehttp_test.cpp +++ b/indra/llcorehttp/tests/llcorehttp_test.cpp @@ -46,6 +46,7 @@  #include "test_httprequestqueue.hpp"  #include "llproxy.h" +#include "llcleanup.h"  unsigned long ssl_thread_id_callback(void);  void ssl_locking_callback(int mode, int type, const char * file, int line); @@ -101,7 +102,7 @@ void init_curl()  void term_curl()  { -	LLProxy::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLProxy);  	CRYPTO_set_locking_callback(NULL);  	for (int i(0); i < ssl_mutex_count; ++i) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 7a97c16ea7..0d239c9435 100755 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -45,6 +45,7 @@  #include "llhttpclient.h"  #include "llsdserialize.h"  #include "llproxy.h" +#include "llcleanup.h"  LLPumpIO* gServicePump = NULL;  BOOL gBreak = false; @@ -587,5 +588,5 @@ bool LLCrashLogger::init()  void LLCrashLogger::commonCleanup()  {  	LLError::logToFile("");   //close crashreport.log -	LLProxy::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLProxy);  } diff --git a/indra/llmessage/tests/llhttpclient_test.cpp b/indra/llmessage/tests/llhttpclient_test.cpp index a32bfa59ce..9356a14f1f 100755 --- a/indra/llmessage/tests/llhttpclient_test.cpp +++ b/indra/llmessage/tests/llhttpclient_test.cpp @@ -42,6 +42,7 @@  #include "lliosocket.h"  #include "stringize.h" +#include "llcleanup.h"  namespace tut  { @@ -66,7 +67,7 @@ namespace tut  		~HTTPClientTestData()  		{  			delete mClientPump; -			LLProxy::cleanupClass(); +			SUBSYSTEM_CLEANUP(LLProxy);  			apr_pool_destroy(mPool);  		} diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index aabc7ed2e4..cc186f4997 100755 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -60,6 +60,7 @@  #include "llflyoutbutton.h"  #include "llsearcheditor.h"  #include "lltoolbar.h" +#include "llcleanup.h"  // for XUIParse  #include "llquaternion.h" @@ -208,7 +209,7 @@ void LLUI::initClass(const settings_map_t& settings,  void LLUI::cleanupClass()  { -	LLRender2D::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLRender2D);  }  void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& remove_popup,  const clear_popups_t& clear_popups) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 6dc71bc94e..6a64f67f9c 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -226,6 +226,7 @@  #include "llsecapi.h"  #include "llmachineid.h"  #include "llmainlooprepeater.h" +#include "llcleanup.h"  #include "llviewereventrecorder.h" @@ -1764,7 +1765,7 @@ bool LLAppViewer::cleanup()  	gTransferManager.cleanup();  #endif -	LLLocalBitmapMgr::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLLocalBitmapMgr);  	// Note: this is where gWorldMap used to be deleted. @@ -1872,11 +1873,11 @@ bool LLAppViewer::cleanup()  	LLViewerObject::cleanupVOClasses(); -	LLAvatarAppearance::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLAvatarAppearance); -	LLAvatarAppearance::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLAvatarAppearance); -	LLPostProcess::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLPostProcess);  	LLTracker::cleanupInstance(); @@ -1902,12 +1903,12 @@ bool LLAppViewer::cleanup()   	//end_messaging_system(); -	LLFollowCamMgr::cleanupClass(); -	//LLVolumeMgr::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLFollowCamMgr); +	//SUBSYSTEM_CLEANUP(LLVolumeMgr);  	LLPrimitive::cleanupVolumeManager(); -	LLWorldMapView::cleanupClass(); -	LLFolderViewItem::cleanupClass(); -	LLUI::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLWorldMapView); +	SUBSYSTEM_CLEANUP(LLFolderViewItem); +	SUBSYSTEM_CLEANUP(LLUI);  	//  	// Shut down the VFS's AFTER the decode manager cleans up (since it cleans up vfiles). @@ -1916,7 +1917,7 @@ bool LLAppViewer::cleanup()  	//  	LL_INFOS() << "Cleaning up VFS" << LL_ENDL; -	LLVFile::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLVFile);  	LL_INFOS() << "Saving Data" << LL_ENDL; @@ -2020,7 +2021,7 @@ bool LLAppViewer::cleanup()  	// *NOTE:Mani - The following call is not thread safe.   	LL_CHECK_MEMORY -	LLCurl::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLCurl);  	LL_CHECK_MEMORY  	// Non-LLCurl libcurl library @@ -2029,9 +2030,9 @@ bool LLAppViewer::cleanup()  	// NOTE The following call is not thread safe.   	ll_cleanup_ares(); -	LLFilePickerThread::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLFilePickerThread); -	//MUST happen AFTER LLCurl::cleanupClass +	//MUST happen AFTER SUBSYSTEM_CLEANUP(LLCurl)  	delete sTextureCache;      sTextureCache = NULL;  	delete sTextureFetch; @@ -2060,17 +2061,17 @@ bool LLAppViewer::cleanup()  	LL_INFOS() << "Cleaning up Media and Textures" << LL_ENDL;  	//Note: -	//LLViewerMedia::cleanupClass() has to be put before gTextureList.shutdown() +	//SUBSYSTEM_CLEANUP(LLViewerMedia) has to be put before gTextureList.shutdown()  	//because some new image might be generated during cleaning up media. --bao -	LLViewerMedia::cleanupClass(); -	LLViewerParcelMedia::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLViewerMedia); +	SUBSYSTEM_CLEANUP(LLViewerParcelMedia);  	gTextureList.shutdown(); // shutdown again in case a callback added something  	LLUIImageList::getInstance()->cleanUp();  	// This should eventually be done in LLAppViewer -	LLImage::cleanupClass(); -	LLVFSThread::cleanupClass(); -	LLLFSThread::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLImage); +	SUBSYSTEM_CLEANUP(LLVFSThread); +	SUBSYSTEM_CLEANUP(LLLFSThread);  #ifndef LL_RELEASE_FOR_DOWNLOAD  	LL_INFOS() << "Auditing VFS" << LL_ENDL; @@ -2113,9 +2114,9 @@ bool LLAppViewer::cleanup()  		LL_INFOS() << "File launched." << LL_ENDL;  	}  	LL_INFOS() << "Cleaning up LLProxy." << LL_ENDL; -	LLProxy::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLProxy); -	LLWearableType::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLWearableType);  	LLMainLoopRepeater::instance().stop(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 42fc300187..3a85468bda 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -194,6 +194,7 @@  #include "llevents.h"  #include "llstartuplistener.h"  #include "lltoolbarview.h" +#include "llcleanup.h"  #if LL_WINDOWS  #include "lldxhardware.h" @@ -2826,7 +2827,7 @@ void LLStartUp::initNameCache()  void LLStartUp::cleanupNameCache()  { -	LLAvatarNameCache::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLAvatarNameCache);  	delete gCacheName;  	gCacheName = NULL; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 3b0adcf7f4..e7c93926d7 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -130,6 +130,7 @@  #include "llpathfindingmanager.h"  #include "llstartup.h"  #include "boost/unordered_map.hpp" +#include "llcleanup.h"  using namespace LLAvatarAppearanceDefines; @@ -8416,7 +8417,7 @@ class LLWorldPostProcess : public view_listener_t  void handle_flush_name_caches()  { -	LLAvatarNameCache::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLAvatarNameCache);  	if (gCacheName) gCacheName->clear();  } diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index a2c0a91ea6..f463c620d3 100755 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -102,6 +102,7 @@  #include "llmediaentry.h"  #include "llfloaterperms.h"  #include "llvocache.h" +#include "llcleanup.h"  //#define DEBUG_UPDATE_TYPE @@ -527,11 +528,11 @@ void LLViewerObject::initVOClasses()  void LLViewerObject::cleanupVOClasses()  { -	LLVOGrass::cleanupClass(); -	LLVOWater::cleanupClass(); -	LLVOTree::cleanupClass(); -	LLVOAvatar::cleanupClass(); -	LLVOVolume::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLVOGrass); +	SUBSYSTEM_CLEANUP(LLVOWater); +	SUBSYSTEM_CLEANUP(LLVOTree); +	SUBSYSTEM_CLEANUP(LLVOAvatar); +	SUBSYSTEM_CLEANUP(LLVOVolume);  	sObjectDataMap.clear();  } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index e317989f04..12ff88c517 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -208,6 +208,7 @@  #include "llwindowlistener.h"  #include "llviewerwindowlistener.h"  #include "llpaneltopinfobar.h" +#include "llcleanup.h"  #if LL_WINDOWS  #include <tchar.h> // For Unicode conversion methods @@ -2124,7 +2125,7 @@ void LLViewerWindow::shutdownGL()  	// Shutdown GL cleanly.  Order is very important here.  	//--------------------------------------------------------  	LLFontGL::destroyDefaultFonts(); -	LLFontManager::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLFontManager);  	stop_glerror();  	gSky.cleanup(); @@ -2147,7 +2148,7 @@ void LLViewerWindow::shutdownGL()  	LLWorldMapView::cleanupTextures();  	LLViewerTextureManager::cleanup() ; -	LLImageGL::cleanupClass() ; +	SUBSYSTEM_CLEANUP(LLImageGL) ;  	LL_INFOS() << "All textures and llimagegl images are destroyed!" << LL_ENDL ; @@ -2160,7 +2161,7 @@ void LLViewerWindow::shutdownGL()  	gGL.shutdown(); -	LLVertexBuffer::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLVertexBuffer);  	LL_INFOS() << "LLVertexBuffer cleaned." << LL_ENDL ;  } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 03712c1065..9c1b78626f 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -115,6 +115,7 @@  #include "llpathfindingpathtool.h"  #include "llscenemonitor.h"  #include "llprogressview.h" +#include "llcleanup.h"  #ifdef _DEBUG  // Debug indices is disabled for now for debug performance - djs 4/24/02 @@ -7373,7 +7374,7 @@ void LLPipeline::doResetVertexBuffers(bool forced)  	}  	LLVOPartGroup::destroyGL(); -	LLVertexBuffer::cleanupClass(); +	SUBSYSTEM_CLEANUP(LLVertexBuffer);  	//delete all name pool caches  	LLGLNamePool::cleanupPools(); | 
