Skip to content
Snippets Groups Projects
Commit b31bfdba authored by Stinson Linden's avatar Stinson Linden
Browse files

MAINT-4009: Converting the Globals class within llerror to be derived from...

MAINT-4009: Converting the Globals class within llerror to be derived from LLSingleton so that it may be cleaned up properly on app exit.
parent 582c10cc
No related branches found
No related tags found
No related merge requests found
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include "lllivefile.h" #include "lllivefile.h"
#include "llsd.h" #include "llsd.h"
#include "llsdserialize.h" #include "llsdserialize.h"
#include "llsingleton.h"
#include "llstl.h" #include "llstl.h"
#include "lltimer.h" #include "lltimer.h"
...@@ -359,27 +360,28 @@ namespace ...@@ -359,27 +360,28 @@ namespace
typedef std::vector<LLError::Recorder*> Recorders; typedef std::vector<LLError::Recorder*> Recorders;
typedef std::vector<LLError::CallSite*> CallSiteVector; typedef std::vector<LLError::CallSite*> CallSiteVector;
class Globals class Globals : public LLSingleton<Globals>
{ {
public: public:
Globals();
std::ostringstream messageStream; std::ostringstream messageStream;
bool messageStreamInUse; bool messageStreamInUse;
void addCallSite(LLError::CallSite&); void addCallSite(LLError::CallSite&);
void invalidateCallSites(); void invalidateCallSites();
static Globals& get();
// return the one instance of the globals
private: private:
CallSiteVector callSites; CallSiteVector callSites;
Globals()
: messageStreamInUse(false)
{ }
}; };
Globals::Globals()
: messageStream(),
messageStreamInUse(false),
callSites()
{
}
void Globals::addCallSite(LLError::CallSite& site) void Globals::addCallSite(LLError::CallSite& site)
{ {
callSites.push_back(&site); callSites.push_back(&site);
...@@ -396,18 +398,6 @@ namespace ...@@ -396,18 +398,6 @@ namespace
callSites.clear(); callSites.clear();
} }
Globals& Globals::get()
{
/* This pattern, of returning a reference to a static function
variable, is to ensure that this global is constructed before
it is used, no matter what the global initialization sequence
is.
See C++ FAQ Lite, sections 10.12 through 10.14
*/
static Globals* globals = new Globals;
return *globals;
}
} }
namespace LLError namespace LLError
...@@ -474,7 +464,7 @@ namespace LLError ...@@ -474,7 +464,7 @@ namespace LLError
void Settings::reset() void Settings::reset()
{ {
Globals::get().invalidateCallSites(); Globals::getInstance()->invalidateCallSites();
Settings*& p = getPtr(); Settings*& p = getPtr();
delete p; delete p;
...@@ -483,7 +473,7 @@ namespace LLError ...@@ -483,7 +473,7 @@ namespace LLError
Settings* Settings::saveAndReset() Settings* Settings::saveAndReset()
{ {
Globals::get().invalidateCallSites(); Globals::getInstance()->invalidateCallSites();
Settings*& p = getPtr(); Settings*& p = getPtr();
Settings* originalSettings = p; Settings* originalSettings = p;
...@@ -493,7 +483,7 @@ namespace LLError ...@@ -493,7 +483,7 @@ namespace LLError
void Settings::restore(Settings* originalSettings) void Settings::restore(Settings* originalSettings)
{ {
Globals::get().invalidateCallSites(); Globals::getInstance()->invalidateCallSites();
Settings*& p = getPtr(); Settings*& p = getPtr();
delete p; delete p;
...@@ -680,9 +670,8 @@ namespace LLError ...@@ -680,9 +670,8 @@ namespace LLError
void setDefaultLevel(ELevel level) void setDefaultLevel(ELevel level)
{ {
Globals& g = Globals::get(); Globals::getInstance()->invalidateCallSites();
Settings& s = Settings::get(); Settings& s = Settings::get();
g.invalidateCallSites();
s.mDefaultLevel = level; s.mDefaultLevel = level;
} }
...@@ -694,33 +683,29 @@ namespace LLError ...@@ -694,33 +683,29 @@ namespace LLError
void setFunctionLevel(const std::string& function_name, ELevel level) void setFunctionLevel(const std::string& function_name, ELevel level)
{ {
Globals& g = Globals::get(); Globals::getInstance()->invalidateCallSites();
Settings& s = Settings::get(); Settings& s = Settings::get();
g.invalidateCallSites();
s.mFunctionLevelMap[function_name] = level; s.mFunctionLevelMap[function_name] = level;
} }
void setClassLevel(const std::string& class_name, ELevel level) void setClassLevel(const std::string& class_name, ELevel level)
{ {
Globals& g = Globals::get(); Globals::getInstance()->invalidateCallSites();
Settings& s = Settings::get(); Settings& s = Settings::get();
g.invalidateCallSites();
s.mClassLevelMap[class_name] = level; s.mClassLevelMap[class_name] = level;
} }
void setFileLevel(const std::string& file_name, ELevel level) void setFileLevel(const std::string& file_name, ELevel level)
{ {
Globals& g = Globals::get(); Globals::getInstance()->invalidateCallSites();
Settings& s = Settings::get(); Settings& s = Settings::get();
g.invalidateCallSites();
s.mFileLevelMap[file_name] = level; s.mFileLevelMap[file_name] = level;
} }
void setTagLevel(const std::string& tag_name, ELevel level) void setTagLevel(const std::string& tag_name, ELevel level)
{ {
Globals& g = Globals::get(); Globals::getInstance()->invalidateCallSites();
Settings& s = Settings::get(); Settings& s = Settings::get();
g.invalidateCallSites();
s.mTagLevelMap[tag_name] = level; s.mTagLevelMap[tag_name] = level;
} }
...@@ -765,10 +750,9 @@ namespace LLError ...@@ -765,10 +750,9 @@ namespace LLError
{ {
void configure(const LLSD& config) void configure(const LLSD& config)
{ {
Globals& g = Globals::get(); Globals::getInstance()->invalidateCallSites();
Settings& s = Settings::get(); Settings& s = Settings::get();
g.invalidateCallSites();
s.mFunctionLevelMap.clear(); s.mFunctionLevelMap.clear();
s.mClassLevelMap.clear(); s.mClassLevelMap.clear();
s.mFileLevelMap.clear(); s.mFileLevelMap.clear();
...@@ -1060,7 +1044,6 @@ namespace LLError ...@@ -1060,7 +1044,6 @@ namespace LLError
return false; return false;
} }
Globals& g = Globals::get();
Settings& s = Settings::get(); Settings& s = Settings::get();
s.mShouldLogCallCounter++; s.mShouldLogCallCounter++;
...@@ -1091,7 +1074,7 @@ namespace LLError ...@@ -1091,7 +1074,7 @@ namespace LLError
: false); : false);
site.mCached = true; site.mCached = true;
g.addCallSite(site); Globals::getInstance()->addCallSite(site);
return site.mShouldLog = site.mLevel >= compareLevel; return site.mShouldLog = site.mLevel >= compareLevel;
} }
...@@ -1101,12 +1084,12 @@ namespace LLError ...@@ -1101,12 +1084,12 @@ namespace LLError
LogLock lock; LogLock lock;
if (lock.ok()) if (lock.ok())
{ {
Globals& g = Globals::get(); Globals* g = Globals::getInstance();
if (!g.messageStreamInUse) if (!g->messageStreamInUse)
{ {
g.messageStreamInUse = true; g->messageStreamInUse = true;
return &g.messageStream; return &g->messageStream;
} }
} }
...@@ -1131,13 +1114,12 @@ namespace LLError ...@@ -1131,13 +1114,12 @@ namespace LLError
message[127] = '\0' ; message[127] = '\0' ;
} }
Globals& g = Globals::get(); Globals* g = Globals::getInstance();
if (out == &g->messageStream)
if (out == &g.messageStream)
{ {
g.messageStream.clear(); g->messageStream.clear();
g.messageStream.str(""); g->messageStream.str("");
g.messageStreamInUse = false; g->messageStreamInUse = false;
} }
else else
{ {
...@@ -1154,15 +1136,15 @@ namespace LLError ...@@ -1154,15 +1136,15 @@ namespace LLError
return; return;
} }
Globals& g = Globals::get(); Globals* g = Globals::getInstance();
Settings& s = Settings::get(); Settings& s = Settings::get();
std::string message = out->str(); std::string message = out->str();
if (out == &g.messageStream) if (out == &g->messageStream)
{ {
g.messageStream.clear(); g->messageStream.clear();
g.messageStream.str(""); g->messageStream.str("");
g.messageStreamInUse = false; g->messageStreamInUse = false;
} }
else else
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment