From 0ba9a00c3116b69745f2d5070ce772d5d4965dbf Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 8 Jan 2013 23:50:27 -0800
Subject: [PATCH] SH-3468 WIP add memory tracking base class cleaned up hacks
 used to get unit tests working LLTrace::init now supports recursive
 initialization/cleanup put NOMINMAX back in win32 header wrappers

---
 indra/llcommon/lltrace.cpp                      | 17 +++++++++++------
 indra/llcommon/llwin32headers.h                 |  4 ++++
 indra/llcommon/llwin32headerslean.h             |  4 ++++
 indra/test/io.cpp                               |  6 ------
 indra/test/llhttpdate_tut.cpp                   |  2 --
 indra/test/lliohttpserver_tut.cpp               |  2 --
 indra/test/test.cpp                             |  2 +-
 .../llplugintest/llmediaplugintest.cpp          |  1 -
 8 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/indra/llcommon/lltrace.cpp b/indra/llcommon/lltrace.cpp
index 9cadd70dd8f..463048008f2 100644
--- a/indra/llcommon/lltrace.cpp
+++ b/indra/llcommon/lltrace.cpp
@@ -30,7 +30,7 @@
 #include "lltracethreadrecorder.h"
 #include "llfasttimer.h"
 
-static bool sInitialized;
+static S32 sInitializationCount = 0;
 
 namespace LLTrace
 {
@@ -39,19 +39,24 @@ static MasterThreadRecorder* gMasterThreadRecorder = NULL;
 
 void init()
 {
-	gMasterThreadRecorder = new MasterThreadRecorder();
-	sInitialized = true;
+	if (sInitializationCount++ == 0)
+	{
+		gMasterThreadRecorder = new MasterThreadRecorder();
+	}
 }
 
 bool isInitialized()
 {
-	return sInitialized; 
+	return sInitializationCount > 0; 
 }
 
 void cleanup()
 {
-	delete gMasterThreadRecorder;
-	gMasterThreadRecorder = NULL;
+	if (--sInitializationCount == 0)
+	{
+		delete gMasterThreadRecorder;
+		gMasterThreadRecorder = NULL;
+	}
 }
 
 MasterThreadRecorder& getMasterThreadRecorder()
diff --git a/indra/llcommon/llwin32headers.h b/indra/llcommon/llwin32headers.h
index 9c89b6b280f..8534ed6298a 100644
--- a/indra/llcommon/llwin32headers.h
+++ b/indra/llcommon/llwin32headers.h
@@ -28,9 +28,13 @@
 #define LL_LLWINDOWS_H
 
 #ifdef LL_WINDOWS
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
 #undef WIN32_LEAN_AND_MEAN
 #include <winsock2.h>
 #include <windows.h>
+#undef NOMINMAX
 #endif
 
 #endif
diff --git a/indra/llcommon/llwin32headerslean.h b/indra/llcommon/llwin32headerslean.h
index d3fb90d4b18..f7e71301a8f 100644
--- a/indra/llcommon/llwin32headerslean.h
+++ b/indra/llcommon/llwin32headerslean.h
@@ -28,9 +28,13 @@
 #define LL_LLWINDOWS_H
 
 #ifdef LL_WINDOWS
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
 #define WIN32_LEAN_AND_MEAN
 #include <winsock2.h>
 #include <windows.h>
+#undef NOMINMAX
 #endif
 
 #endif
diff --git a/indra/test/io.cpp b/indra/test/io.cpp
index f2b4a5339c3..b3eabc2e8a5 100644
--- a/indra/test/io.cpp
+++ b/indra/test/io.cpp
@@ -831,7 +831,6 @@ namespace tut
 	public:
 		PumpAndChainTestData()
 		{
-			LLCommon::initClass();
 			apr_pool_create(&mPool, NULL);
 			mPump = new LLPumpIO(mPool);
 		}
@@ -841,7 +840,6 @@ namespace tut
 			mChain.clear();
 			delete mPump;
 			apr_pool_destroy(mPool);
-			LLCommon::cleanupClass();
 		}
 	};
 	typedef test_group<PumpAndChainTestData>	PumpAndChainTestGroup;
@@ -912,7 +910,6 @@ namespace tut
 		
 		pipe_and_pump_fitness()
 		{
-			LLCommon::initClass();
 			LLFrameTimer::updateFrameTime();
 			apr_pool_create(&mPool, NULL);
 			mPump = new LLPumpIO(mPool);
@@ -927,7 +924,6 @@ namespace tut
 			mSocket.reset();
 			delete mPump;
 			apr_pool_destroy(mPool);
-			LLCommon::cleanupClass();
 		}
 
 	protected:
@@ -1191,11 +1187,9 @@ namespace tut
 			LLSimpleRPCResponse(LLSD* response) :
 				mResponsePtr(response)
 			{
-				LLCommon::initClass();
 			}
 			~LLSimpleRPCResponse() 
 			{
-				LLCommon::cleanupClass();
 			}
 			virtual bool response(LLPumpIO* pump)
 			{
diff --git a/indra/test/llhttpdate_tut.cpp b/indra/test/llhttpdate_tut.cpp
index d6f0ba5e66e..ecf734ee907 100644
--- a/indra/test/llhttpdate_tut.cpp
+++ b/indra/test/llhttpdate_tut.cpp
@@ -41,11 +41,9 @@ namespace tut
     {
 		httpdate_data() 
 		{ 
-			LLCommon::initClass();
 		}
 		~httpdate_data() 
 		{ 
-			LLCommon::cleanupClass();
 		}
         LLDate some_date;
     };
diff --git a/indra/test/lliohttpserver_tut.cpp b/indra/test/lliohttpserver_tut.cpp
index e7af09f80b0..3fa5c8dd423 100644
--- a/indra/test/lliohttpserver_tut.cpp
+++ b/indra/test/lliohttpserver_tut.cpp
@@ -77,7 +77,6 @@ namespace tut
 		HTTPServiceTestData()
 			: mResponse(NULL)
 		{
-			LLCommon::initClass();
 			LLHTTPStandardServices::useServices();
 			LLHTTPRegistrar::buildAllServices(mRoot);
 			mRoot.addNode("/delayed/echo", new DelayedEcho(this));
@@ -86,7 +85,6 @@ namespace tut
 
 		~HTTPServiceTestData()
 		{
-			LLCommon::cleanupClass();
 		}
 		
 		LLHTTPNode mRoot;
diff --git a/indra/test/test.cpp b/indra/test/test.cpp
index 8bd302ce7a9..28de88201c2 100644
--- a/indra/test/test.cpp
+++ b/indra/test/test.cpp
@@ -514,8 +514,8 @@ int main(int argc, char **argv)
 #endif
 
 	ll_init_apr();
-	LLTrace::init();
 	
+	LLTrace::init();
 	apr_getopt_t* os = NULL;
 	if(APR_SUCCESS != apr_getopt_init(&os, gAPRPoolp, argc, argv))
 	{
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 99a82ed5558..fa4f5abd284 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -41,7 +41,6 @@
 #if LL_WINDOWS
 #pragma warning(disable: 4263)
 #pragma warning(disable: 4264)
-#undef NOMINMAX
 #endif
 
 #if __APPLE__
-- 
GitLab