forked from qt-creator/qt-creator
Maemo: Fix "race condition" in singleton access.
This commit is contained in:
@@ -87,7 +87,8 @@ MaemoDeviceConfigurations::DeviceConfig::DeviceConfig(const QString &name)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MaemoDeviceConfigurations::DeviceConfig::DeviceConfig(const QSettings &settings)
|
MaemoDeviceConfigurations::DeviceConfig::DeviceConfig(const QSettings &settings,
|
||||||
|
quint64 &nextId)
|
||||||
: name(settings.value(NameKey).toString()),
|
: name(settings.value(NameKey).toString()),
|
||||||
type(static_cast<DeviceType>(settings.value(TypeKey, Physical).toInt())),
|
type(static_cast<DeviceType>(settings.value(TypeKey, Physical).toInt())),
|
||||||
host(settings.value(HostKey).toString()),
|
host(settings.value(HostKey).toString()),
|
||||||
@@ -97,11 +98,10 @@ MaemoDeviceConfigurations::DeviceConfig::DeviceConfig(const QSettings &settings)
|
|||||||
pwd(settings.value(PasswordKey).toString()),
|
pwd(settings.value(PasswordKey).toString()),
|
||||||
keyFile(settings.value(KeyFileKey).toString()),
|
keyFile(settings.value(KeyFileKey).toString()),
|
||||||
timeout(settings.value(TimeoutKey, 30).toInt()),
|
timeout(settings.value(TimeoutKey, 30).toInt()),
|
||||||
internalId(settings.value(InternalIdKey, MaemoDeviceConfigurations::instance().m_nextId).toInt())
|
internalId(settings.value(InternalIdKey, nextId).toInt())
|
||||||
{
|
{
|
||||||
if (internalId == MaemoDeviceConfigurations::instance().m_nextId)
|
if (internalId == nextId)
|
||||||
++MaemoDeviceConfigurations::instance().m_nextId;
|
++nextId;
|
||||||
qDebug("%s: name = %s, id = %llu", Q_FUNC_INFO, qPrintable(name), internalId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MaemoDeviceConfigurations::DeviceConfig::DeviceConfig()
|
MaemoDeviceConfigurations::DeviceConfig::DeviceConfig()
|
||||||
@@ -146,7 +146,6 @@ void MaemoDeviceConfigurations::save()
|
|||||||
{
|
{
|
||||||
QSettings *settings = Core::ICore::instance()->settings();
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
settings->beginGroup(SettingsGroup);
|
settings->beginGroup(SettingsGroup);
|
||||||
qDebug("Writing next id: %llu", m_nextId);
|
|
||||||
settings->setValue(IdCounterKey, m_nextId);
|
settings->setValue(IdCounterKey, m_nextId);
|
||||||
settings->beginWriteArray(ConfigListKey, m_devConfigs.count());
|
settings->beginWriteArray(ConfigListKey, m_devConfigs.count());
|
||||||
for (int i = 0; i < m_devConfigs.count(); ++i) {
|
for (int i = 0; i < m_devConfigs.count(); ++i) {
|
||||||
@@ -169,11 +168,10 @@ void MaemoDeviceConfigurations::load()
|
|||||||
QSettings *settings = Core::ICore::instance()->settings();
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
settings->beginGroup(SettingsGroup);
|
settings->beginGroup(SettingsGroup);
|
||||||
m_nextId = settings->value(IdCounterKey, 1).toULongLong();
|
m_nextId = settings->value(IdCounterKey, 1).toULongLong();
|
||||||
qDebug("Read next id: %llu", m_nextId);
|
|
||||||
int count = settings->beginReadArray(ConfigListKey);
|
int count = settings->beginReadArray(ConfigListKey);
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
settings->setArrayIndex(i);
|
settings->setArrayIndex(i);
|
||||||
m_devConfigs.append(DeviceConfig(*settings));
|
m_devConfigs.append(DeviceConfig(*settings, m_nextId));
|
||||||
}
|
}
|
||||||
settings->endArray();
|
settings->endArray();
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
@@ -181,21 +179,17 @@ void MaemoDeviceConfigurations::load()
|
|||||||
|
|
||||||
MaemoDeviceConfigurations::DeviceConfig MaemoDeviceConfigurations::find(const QString &name) const
|
MaemoDeviceConfigurations::DeviceConfig MaemoDeviceConfigurations::find(const QString &name) const
|
||||||
{
|
{
|
||||||
qDebug("%s: Looking for name %s", Q_FUNC_INFO, qPrintable(name));
|
|
||||||
QList<DeviceConfig>::ConstIterator resultIt =
|
QList<DeviceConfig>::ConstIterator resultIt =
|
||||||
std::find_if(m_devConfigs.constBegin(), m_devConfigs.constEnd(),
|
std::find_if(m_devConfigs.constBegin(), m_devConfigs.constEnd(),
|
||||||
DevConfNameMatcher(name));
|
DevConfNameMatcher(name));
|
||||||
qDebug("Found: %d", resultIt != m_devConfigs.constEnd());
|
|
||||||
return resultIt == m_devConfigs.constEnd() ? DeviceConfig() : *resultIt;
|
return resultIt == m_devConfigs.constEnd() ? DeviceConfig() : *resultIt;
|
||||||
}
|
}
|
||||||
|
|
||||||
MaemoDeviceConfigurations::DeviceConfig MaemoDeviceConfigurations::find(int id) const
|
MaemoDeviceConfigurations::DeviceConfig MaemoDeviceConfigurations::find(int id) const
|
||||||
{
|
{
|
||||||
qDebug("%s: Looking for id %d", Q_FUNC_INFO, id);
|
|
||||||
QList<DeviceConfig>::ConstIterator resultIt =
|
QList<DeviceConfig>::ConstIterator resultIt =
|
||||||
std::find_if(m_devConfigs.constBegin(), m_devConfigs.constEnd(),
|
std::find_if(m_devConfigs.constBegin(), m_devConfigs.constEnd(),
|
||||||
DevConfIdMatcher(id));
|
DevConfIdMatcher(id));
|
||||||
qDebug("Found: %d", resultIt != m_devConfigs.constEnd());
|
|
||||||
return resultIt == m_devConfigs.constEnd() ? DeviceConfig() : *resultIt;
|
return resultIt == m_devConfigs.constEnd() ? DeviceConfig() : *resultIt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public:
|
|||||||
enum AuthType { Password, Key };
|
enum AuthType { Password, Key };
|
||||||
DeviceConfig();
|
DeviceConfig();
|
||||||
DeviceConfig(const QString &name);
|
DeviceConfig(const QString &name);
|
||||||
DeviceConfig(const QSettings &settings);
|
DeviceConfig(const QSettings &settings, quint64 &nextId);
|
||||||
void save(QSettings &settings) const;
|
void save(QSettings &settings) const;
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
QString name;
|
QString name;
|
||||||
|
|||||||
Reference in New Issue
Block a user