From e4e7a456f5ecfe01c6f832758f120ca43b627aaa Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Sun, 26 Dec 2010 01:27:49 +0000 Subject: [PATCH] - attempt to bugfix threaded logger --- .../include/platform/common/simple_threads.h | 2 +- .../sources/platform/common/simple_threads.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/source/shared_lib/include/platform/common/simple_threads.h b/source/shared_lib/include/platform/common/simple_threads.h index 2446fd711..83d87f34b 100644 --- a/source/shared_lib/include/platform/common/simple_threads.h +++ b/source/shared_lib/include/platform/common/simple_threads.h @@ -100,7 +100,7 @@ protected: vector logList; time_t lastSaveToDisk; - void saveToDisk(bool forceSaveAll); + void saveToDisk(bool forceSaveAll,bool logListAlreadyLocked); bool checkSaveCurrentLogBufferToDisk(); public: diff --git a/source/shared_lib/sources/platform/common/simple_threads.cpp b/source/shared_lib/sources/platform/common/simple_threads.cpp index 04748bc1c..d6837fcbf 100644 --- a/source/shared_lib/sources/platform/common/simple_threads.cpp +++ b/source/shared_lib/sources/platform/common/simple_threads.cpp @@ -208,7 +208,7 @@ void LogFileThread::addLogEntry(SystemFlags::DebugType type, string logEntry) { logList.push_back(entry); if(logList.size() >= 100000) { - saveToDisk(false); + saveToDisk(false,true); } } @@ -235,7 +235,7 @@ void LogFileThread::execute() { try { for(;this->getQuitStatus() == false;) { if(checkSaveCurrentLogBufferToDisk() == true) { - saveToDisk(false); + saveToDisk(false,false); } if(this->getQuitStatus() == false) { sleep(50); @@ -243,7 +243,7 @@ void LogFileThread::execute() { } // Ensure remaining entryies are logged to disk on shutdown - saveToDisk(true); + saveToDisk(true,false); } catch(const exception &ex) { //SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s]\n",__FILE__,__FUNCTION__,__LINE__,ex.what()); @@ -267,8 +267,12 @@ std::size_t LogFileThread::getLogEntryBufferCount() { return logCount; } -void LogFileThread::saveToDisk(bool forceSaveAll) { - MutexSafeWrapper safeMutex(&mutexLogList); +void LogFileThread::saveToDisk(bool forceSaveAll,bool logListAlreadyLocked) { + MutexSafeWrapper safeMutex(NULL); + if(logListAlreadyLocked == false) { + safeMutex.setMutex(&mutexLogList); + } + std::size_t logCount = logList.size(); if(logCount > 0) { vector tempLogList = logList;