forked from qt-creator/qt-creator
BareMetal: Do not add a duplicate entry for GDB server provider
In case the SDK settings contain some host which was imported, and the server provider was modified to a different host, it is re-imported on next execution of Creator. Also fix a potential memory leak when registration fails. Change-Id: I96d087ab35e0dc54975768c4bc697218080049ae Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
ced554aaab
commit
7a7813b1b8
@@ -79,13 +79,21 @@ void BareMetalDevice::fromMap(const QVariantMap &map)
|
|||||||
IDevice::fromMap(map);
|
IDevice::fromMap(map);
|
||||||
QString gdbServerProvider = map.value(QLatin1String(gdbServerProviderIdKeyC)).toString();
|
QString gdbServerProvider = map.value(QLatin1String(gdbServerProviderIdKeyC)).toString();
|
||||||
if (gdbServerProvider.isEmpty()) {
|
if (gdbServerProvider.isEmpty()) {
|
||||||
const QSsh::SshConnectionParameters sshParams = sshParameters();
|
const QString name = displayName();
|
||||||
DefaultGdbServerProvider *newProvider = new DefaultGdbServerProvider;
|
if (GdbServerProvider *provider =
|
||||||
newProvider->setDisplayName(displayName());
|
GdbServerProviderManager::instance()->findByDisplayName(name)) {
|
||||||
newProvider->m_host = sshParams.host;
|
gdbServerProvider = provider->id();
|
||||||
newProvider->m_port = sshParams.port;
|
} else {
|
||||||
GdbServerProviderManager::instance()->registerProvider(newProvider);
|
const QSsh::SshConnectionParameters sshParams = sshParameters();
|
||||||
gdbServerProvider = newProvider->id();
|
DefaultGdbServerProvider *newProvider = new DefaultGdbServerProvider;
|
||||||
|
newProvider->setDisplayName(name);
|
||||||
|
newProvider->m_host = sshParams.host;
|
||||||
|
newProvider->m_port = sshParams.port;
|
||||||
|
if (GdbServerProviderManager::instance()->registerProvider(newProvider))
|
||||||
|
gdbServerProvider = newProvider->id();
|
||||||
|
else
|
||||||
|
delete newProvider;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setGdbServerProviderId(gdbServerProvider);
|
setGdbServerProviderId(gdbServerProvider);
|
||||||
}
|
}
|
||||||
|
@@ -172,6 +172,14 @@ GdbServerProvider *GdbServerProviderManager::findProvider(const QString &id) con
|
|||||||
return Utils::findOrDefault(m_providers, Utils::equal(&GdbServerProvider::id, id));
|
return Utils::findOrDefault(m_providers, Utils::equal(&GdbServerProvider::id, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GdbServerProvider *GdbServerProviderManager::findByDisplayName(const QString &displayName) const
|
||||||
|
{
|
||||||
|
if (displayName.isEmpty())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return Utils::findOrDefault(m_providers, Utils::equal(&GdbServerProvider::displayName, displayName));
|
||||||
|
}
|
||||||
|
|
||||||
void GdbServerProviderManager::notifyAboutUpdate(GdbServerProvider *provider)
|
void GdbServerProviderManager::notifyAboutUpdate(GdbServerProvider *provider)
|
||||||
{
|
{
|
||||||
if (!provider || !m_providers.contains(provider))
|
if (!provider || !m_providers.contains(provider))
|
||||||
|
@@ -56,6 +56,7 @@ public:
|
|||||||
QList<GdbServerProvider *> providers() const;
|
QList<GdbServerProvider *> providers() const;
|
||||||
QList<GdbServerProviderFactory *> factories() const;
|
QList<GdbServerProviderFactory *> factories() const;
|
||||||
GdbServerProvider *findProvider(const QString &id) const;
|
GdbServerProvider *findProvider(const QString &id) const;
|
||||||
|
GdbServerProvider *findByDisplayName(const QString &displayName) const;
|
||||||
bool registerProvider(GdbServerProvider *);
|
bool registerProvider(GdbServerProvider *);
|
||||||
void deregisterProvider(GdbServerProvider *);
|
void deregisterProvider(GdbServerProvider *);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user