Skip to content
Snippets Groups Projects
Commit 5c989b9d authored by Julien Michel's avatar Julien Michel
Browse files

ENH: Refactor singleton pattern to be thread-safe and simpler

parent 7e1229c0
Branches
Tags
No related merge requests found
...@@ -61,7 +61,7 @@ private: ...@@ -61,7 +61,7 @@ private:
Logger(const Self &); //purposely not implemented Logger(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented void operator =(const Self&); //purposely not implemented
static Pointer Singleton; static Pointer CreateInstance();
}; // class Logger }; // class Logger
......
...@@ -29,25 +29,28 @@ ...@@ -29,25 +29,28 @@
namespace otb namespace otb
{ {
Logger::Pointer Logger::Singleton = ITK_NULLPTR; Logger::Pointer Logger::CreateInstance()
Logger::Pointer Logger::Instance()
{ {
if(!Logger::Singleton) Logger::Pointer instance = Logger::New();
{
Logger::Singleton = Logger::New();
// By default, redirect logs to std::cout // By default, redirect logs to std::cout
itk::StdStreamLogOutput::Pointer defaultOutput = itk::StdStreamLogOutput::New(); itk::StdStreamLogOutput::Pointer defaultOutput = itk::StdStreamLogOutput::New();
defaultOutput->SetStream(std::cout); defaultOutput->SetStream(std::cout);
instance->AddLogOutput(defaultOutput);
// Log setup information
instance->LogSetupInformation();
Logger::Singleton->AddLogOutput(defaultOutput); return instance;
}
// Log setup information Logger::Pointer Logger::Instance()
Logger::Singleton->LogSetupInformation(); {
} // Static locales are initialized once in a thread-safe way
static Logger::Pointer instance = CreateInstance();
return Logger::Singleton;
return instance;
} }
Logger::Logger() Logger::Logger()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment