Improved thread safety for Settings.

Also moved some data from the global namespace to an anonymous namespace.
This commit is contained in:
Leon Styhre 2021-11-15 22:53:21 +01:00
parent 6bc4a09c9b
commit 81d6f0fd30
2 changed files with 43 additions and 54 deletions

View file

@ -19,8 +19,8 @@
#include <pugixml.hpp>
#include <vector>
Settings* Settings::sInstance = nullptr;
namespace
{
// These values are NOT saved to es_settings.xml since they're not set via
// the in-program settings menu. Most can be set using command-line arguments,
// but some are debug flags that are either hardcoded or set by internal debug
@ -59,6 +59,7 @@ std::vector<std::string> settingsSkipSaving
"ScraperFilter"
// clang-format on
};
} // namespace
Settings::Settings()
{
@ -67,20 +68,10 @@ Settings::Settings()
loadFile();
}
Settings* Settings::getInstance()
std::shared_ptr<Settings> Settings::getInstance()
{
if (sInstance == nullptr)
sInstance = new Settings();
return sInstance;
}
void Settings::deinit()
{
if (sInstance) {
delete sInstance;
sInstance = nullptr;
}
static std::shared_ptr<Settings> instance{std::shared_ptr<Settings>(new Settings)};
return instance;
}
void Settings::setDefaults()

View file

@ -11,14 +11,14 @@
#define ES_CORE_SETTINGS_H
#include <map>
#include <memory>
#include <string>
// This is a singleton for storing settings.
class Settings
{
public:
static Settings* getInstance();
static void deinit();
static std::shared_ptr<Settings> getInstance();
void loadFile();
void saveFile();
@ -39,8 +39,6 @@ public:
bool setString(const std::string& name, const std::string& value);
private:
static Settings* sInstance;
Settings();
// Clear everything and load default values.