From abf05a2ae6672fb74e15b27f9055935917e56685 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Sun, 2 May 2010 06:21:36 +0000 Subject: [PATCH] - Fixed some bugs related to logfile processing. - Added debug project to win32 projects - Changed some compiler settings for win32 projects to enable sse --- mk/windoze/Glest.sln | 13 ++++ mk/windoze/Glest.suo | Bin 238080 -> 248832 bytes mk/windoze/g3d_viewer.vcproj | 1 + mk/windoze/glest_configurator.vcproj | 1 + mk/windoze/glest_editor.vcproj | 1 + mk/windoze/glest_game.vcproj | 13 ++-- mk/windoze/libstreflop.vcproj | 75 +++++++++++++++++++++++- mk/windoze/shared_lib.vcproj | 11 +++- source/shared_lib/include/util/util.h | 29 +++++++-- source/shared_lib/sources/util/util.cpp | 45 +++++++------- 10 files changed, 148 insertions(+), 41 deletions(-) diff --git a/mk/windoze/Glest.sln b/mk/windoze/Glest.sln index 5223d02e2..2072fcf59 100755 --- a/mk/windoze/Glest.sln +++ b/mk/windoze/Glest.sln @@ -29,6 +29,7 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug+MT|Win32 = Debug+MT|Win32 + Debug-MT|Win32 = Debug-MT|Win32 No debug|Win32 = No debug|Win32 Release with error catching|Win32 = Release with error catching|Win32 Release|Win32 = Release|Win32 @@ -40,6 +41,8 @@ Global {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.Debug|Win32.Build.0 = Debug|Win32 {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.Debug+MT|Win32.ActiveCfg = Debug|Win32 {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.Debug+MT|Win32.Build.0 = Debug|Win32 + {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.Debug-MT|Win32.ActiveCfg = Debug|Win32 + {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.Debug-MT|Win32.Build.0 = Debug|Win32 {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.No debug|Win32.ActiveCfg = Release|Win32 {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.No debug|Win32.Build.0 = Release|Win32 {6B0C65F1-D031-46AF-AC0D-7C38892D2952}.Release with error catching|Win32.ActiveCfg = Release|Win32 @@ -54,6 +57,8 @@ Global {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.Debug|Win32.Build.0 = Debug|Win32 {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.Debug+MT|Win32.ActiveCfg = Debug|Win32 {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.Debug+MT|Win32.Build.0 = Debug|Win32 + {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.Debug-MT|Win32.ActiveCfg = Debug|Win32 + {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.Debug-MT|Win32.Build.0 = Debug|Win32 {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.No debug|Win32.ActiveCfg = Release|Win32 {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.No debug|Win32.Build.0 = Release|Win32 {8DAA0C24-95CD-4F66-B4C5-19ABDD771746}.Release with error catching|Win32.ActiveCfg = Release|Win32 @@ -68,6 +73,8 @@ Global {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.Debug|Win32.Build.0 = Debug|Win32 {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.Debug+MT|Win32.ActiveCfg = Debug|Win32 {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.Debug+MT|Win32.Build.0 = Debug|Win32 + {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.Debug-MT|Win32.ActiveCfg = Debug|Win32 + {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.Debug-MT|Win32.Build.0 = Debug|Win32 {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.No debug|Win32.ActiveCfg = Release|Win32 {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.No debug|Win32.Build.0 = Release|Win32 {5D09BE33-81EC-450B-8A7B-2E7B941ADC56}.Release with error catching|Win32.ActiveCfg = Release|Win32 @@ -82,6 +89,8 @@ Global {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.Debug|Win32.Build.0 = Debug|Win32 {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.Debug+MT|Win32.ActiveCfg = Debug|Win32 {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.Debug+MT|Win32.Build.0 = Debug|Win32 + {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.Debug-MT|Win32.ActiveCfg = Debug|Win32 + {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.Debug-MT|Win32.Build.0 = Debug|Win32 {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.No debug|Win32.ActiveCfg = Release|Win32 {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.No debug|Win32.Build.0 = Release|Win32 {FE5C7C7C-F109-44F5-8329-25A4E24F162C}.Release with error catching|Win32.ActiveCfg = Release|Win32 @@ -96,6 +105,8 @@ Global {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.Debug|Win32.Build.0 = Debug|Win32 {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.Debug+MT|Win32.ActiveCfg = Debug|Win32 {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.Debug+MT|Win32.Build.0 = Debug|Win32 + {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.Debug-MT|Win32.ActiveCfg = Debug|Win32 + {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.Debug-MT|Win32.Build.0 = Debug|Win32 {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.No debug|Win32.ActiveCfg = Release|Win32 {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.No debug|Win32.Build.0 = Release|Win32 {FE5C7C7C-F109-44F5-8329-19A4E24F162D}.Release with error catching|Win32.ActiveCfg = Release|Win32 @@ -110,6 +121,8 @@ Global {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.Debug|Win32.Build.0 = Debug|Win32 {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.Debug+MT|Win32.ActiveCfg = Debug|Win32 {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.Debug+MT|Win32.Build.0 = Debug|Win32 + {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32 + {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.Debug-MT|Win32.Build.0 = Debug-MT|Win32 {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.No debug|Win32.ActiveCfg = Release|Win32 {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.No debug|Win32.Build.0 = Release|Win32 {CDF4DDB9-945E-4D0D-9F0E-2BBEB5D22141}.Release with error catching|Win32.ActiveCfg = Release|Win32 diff --git a/mk/windoze/Glest.suo b/mk/windoze/Glest.suo index eeb2666bcb29779393d81bdd8a9a6a77401e6682..c19b4b8b046dd4ef98d5d7b06be1a899040fed71 100755 GIT binary patch delta 25915 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 delta 25278 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 diff --git a/mk/windoze/g3d_viewer.vcproj b/mk/windoze/g3d_viewer.vcproj index 3e5be7158..461a3fecc 100755 --- a/mk/windoze/g3d_viewer.vcproj +++ b/mk/windoze/g3d_viewer.vcproj @@ -116,6 +116,7 @@ /> @@ -107,6 +107,79 @@ /> + + + + + + + + + + + + + + + + + + + diff --git a/source/shared_lib/include/util/util.h b/source/shared_lib/include/util/util.h index 87e932aca..656ba44f3 100644 --- a/source/shared_lib/include/util/util.h +++ b/source/shared_lib/include/util/util.h @@ -15,10 +15,10 @@ #include #include #include -//#include "thread.h" +#include "thread.h" using std::string; -//using namespace Shared::Platform; +using namespace Shared::Platform; namespace Shared{ namespace Util{ @@ -45,7 +45,7 @@ public: this->fileStream = NULL; this->debugLogFileName = ""; this->fileStreamOwner = false; - //this->mutex = NULL; + this->mutex = NULL; } SystemFlagsType(DebugType debugType) { this->debugType = debugType; @@ -53,8 +53,11 @@ public: this->fileStream = NULL; this->debugLogFileName = ""; this->fileStreamOwner = false; - //this->mutex = NULL; + this->mutex = NULL; } + ~SystemFlagsType() { + Close(); + } SystemFlagsType(DebugType debugType,bool enabled, std::ofstream *fileStream,std::string debugLogFileName) { this->debugType = debugType; @@ -62,14 +65,28 @@ public: this->fileStream = fileStream; this->debugLogFileName = debugLogFileName; this->fileStreamOwner = false; - //this->mutex = mutex; + this->mutex = NULL; } + void Close() { + if(this->fileStreamOwner == true) { + if( this->fileStream != NULL && + this->fileStream->is_open() == true) { + this->fileStream->close(); + } + delete this->fileStream; + delete this->mutex; + } + this->fileStream = NULL; + this->fileStreamOwner = false; + this->mutex = NULL; + } + bool enabled; std::ofstream *fileStream; std::string debugLogFileName; bool fileStreamOwner; - //Mutex *mutex; + Mutex *mutex; }; protected: diff --git a/source/shared_lib/sources/util/util.cpp b/source/shared_lib/sources/util/util.cpp index 28bc15f21..c05e6f638 100644 --- a/source/shared_lib/sources/util/util.cpp +++ b/source/shared_lib/sources/util/util.cpp @@ -40,10 +40,12 @@ namespace Shared{ namespace Util{ std::map SystemFlags::debugLogFileList; void SystemFlags::init() { - SystemFlags::debugLogFileList[SystemFlags::debugSystem] = SystemFlags::SystemFlagsType(SystemFlags::debugSystem); - SystemFlags::debugLogFileList[SystemFlags::debugNetwork] = SystemFlags::SystemFlagsType(SystemFlags::debugNetwork); - SystemFlags::debugLogFileList[SystemFlags::debugPerformance] = SystemFlags::SystemFlagsType(SystemFlags::debugPerformance); - SystemFlags::debugLogFileList[SystemFlags::debugWorldSynch] = SystemFlags::SystemFlagsType(SystemFlags::debugWorldSynch); + if(SystemFlags::debugLogFileList.size() == 0) { + SystemFlags::debugLogFileList[SystemFlags::debugSystem] = SystemFlags::SystemFlagsType(SystemFlags::debugSystem); + SystemFlags::debugLogFileList[SystemFlags::debugNetwork] = SystemFlags::SystemFlagsType(SystemFlags::debugNetwork); + SystemFlags::debugLogFileList[SystemFlags::debugPerformance] = SystemFlags::SystemFlagsType(SystemFlags::debugPerformance); + SystemFlags::debugLogFileList[SystemFlags::debugWorldSynch] = SystemFlags::SystemFlagsType(SystemFlags::debugWorldSynch); + } } int SystemFlags::lockFile = -1; @@ -74,23 +76,13 @@ SystemFlags::~SystemFlags() { void SystemFlags::Close() { printf("START Closing logfiles\n"); - for(std::map::iterator iterMap = SystemFlags::debugLogFileList.begin(); - iterMap != SystemFlags::debugLogFileList.end(); iterMap++) { - SystemFlags::SystemFlagsType ¤tDebugLog = iterMap->second; - - if(currentDebugLog.fileStreamOwner == true) { - if( currentDebugLog.fileStream != NULL && - currentDebugLog.fileStream->is_open() == true) { - currentDebugLog.fileStream->close(); - } - delete currentDebugLog.fileStream; - //delete currentDebugLog.mutex; + if(SystemFlags::debugLogFileList.size() > 0) { + for(std::map::iterator iterMap = SystemFlags::debugLogFileList.begin(); + iterMap != SystemFlags::debugLogFileList.end(); iterMap++) { + SystemFlags::SystemFlagsType ¤tDebugLog = iterMap->second; + currentDebugLog.Close(); } - currentDebugLog.fileStream = NULL; - currentDebugLog.fileStreamOwner = false; - //currentDebugLog.mutex = NULL; } - if(SystemFlags::lockFile != -1) { #ifndef WIN32 close(SystemFlags::lockFile); @@ -109,6 +101,9 @@ void SystemFlags::Close() { } void SystemFlags::OutputDebug(DebugType type, const char *fmt, ...) { + if(SystemFlags::debugLogFileList.size() == 0) { + SystemFlags::init(); + } SystemFlags::SystemFlagsType ¤tDebugLog = SystemFlags::debugLogFileList[type]; if(currentDebugLog.enabled == false) { return; @@ -143,7 +138,7 @@ void SystemFlags::OutputDebug(DebugType type, const char *fmt, ...) { currentDebugLog2.fileStream != NULL) { currentDebugLog.fileStream = currentDebugLog2.fileStream; currentDebugLog.fileStreamOwner = false; - //currentDebugLog.mutex = currentDebugLog2.mutex; + currentDebugLog.mutex = currentDebugLog2.mutex; break; } } @@ -189,17 +184,17 @@ void SystemFlags::OutputDebug(DebugType type, const char *fmt, ...) { currentDebugLog.fileStream = new std::ofstream(); currentDebugLog.fileStream->open(debugLog.c_str(), ios_base::out | ios_base::trunc); currentDebugLog.fileStreamOwner = true; - //currentDebugLog.mutex = new Mutex(); + currentDebugLog.mutex = new Mutex(); } printf("Opening logfile [%s] type = %d, currentDebugLog.fileStreamOwner = %d\n",debugLog.c_str(),type, currentDebugLog.fileStreamOwner); - //currentDebugLog.mutex->p(); + currentDebugLog.mutex->p(); (*currentDebugLog.fileStream) << "Starting Mega-Glest logging for type: " << type << "\n"; (*currentDebugLog.fileStream).flush(); - //currentDebugLog.mutex->v(); + currentDebugLog.mutex->v(); } //printf("Logfile is open [%s]\n",SystemFlags::debugLogFile); @@ -208,12 +203,12 @@ void SystemFlags::OutputDebug(DebugType type, const char *fmt, ...) { assert(currentDebugLog.fileStream != NULL); - //currentDebugLog.mutex->p(); + currentDebugLog.mutex->p(); (*currentDebugLog.fileStream) << "[" << szBuf2 << "] " << szBuf; (*currentDebugLog.fileStream).flush(); - //currentDebugLog.mutex->v(); + currentDebugLog.mutex->v(); } // output to console else {