fix: fix not thread-safe settings singleton.
fix not thread-safe way for fetching settings singleton. remove qApp from Settings' parent, use nullptr replace it and leak it anyway. because we may initialize it before initializing QApplication. in that time, qApp is nullptr.
This commit is contained in:
@@ -13,6 +13,14 @@
|
||||
#include <QKeySequence>
|
||||
#include <QMetaEnum>
|
||||
|
||||
Settings *Settings::instance()
|
||||
{
|
||||
// SAFETY:
|
||||
// This is a global singleton and it is leaked by design.
|
||||
static Settings* INSTANCE = new Settings();
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
namespace QEnumHelper
|
||||
{
|
||||
template <typename E>
|
||||
@@ -34,17 +42,6 @@ namespace QEnumHelper
|
||||
}
|
||||
}
|
||||
|
||||
Settings *Settings::m_settings_instance = nullptr;
|
||||
|
||||
Settings *Settings::instance()
|
||||
{
|
||||
if (!m_settings_instance) {
|
||||
m_settings_instance = new Settings;
|
||||
}
|
||||
|
||||
return m_settings_instance;
|
||||
}
|
||||
|
||||
bool Settings::useLightCheckerboard() const
|
||||
{
|
||||
return m_qsettings->value("use_light_checkerboard", false).toBool();
|
||||
@@ -156,8 +153,8 @@ QString getApplicationDirPath()
|
||||
}
|
||||
#endif // defined(FLAG_PORTABLE_MODE_SUPPORT) && defined(Q_OS_WIN)
|
||||
|
||||
Settings::Settings()
|
||||
: QObject(qApp)
|
||||
Settings::Settings(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
QString configPath;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user