summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2015-08-20 08:48:06 +0300
committerOrgad Shaneh <orgads@gmail.com>2015-08-27 10:27:50 +0000
commit7a7813b1b8b6ac02ad8016d9c5f32031f2d7a795 (patch)
tree411b6e7ea1e0a38eef14f62d98ae76186e394d52
parentced554aaabbad09d1a79691f0a34b9e6e52296a4 (diff)
downloadqt-creator-7a7813b1b8b6ac02ad8016d9c5f32031f2d7a795.tar.gz
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>
-rw-r--r--src/plugins/baremetal/baremetaldevice.cpp22
-rw-r--r--src/plugins/baremetal/gdbserverprovidermanager.cpp8
-rw-r--r--src/plugins/baremetal/gdbserverprovidermanager.h1
3 files changed, 24 insertions, 7 deletions
diff --git a/src/plugins/baremetal/baremetaldevice.cpp b/src/plugins/baremetal/baremetaldevice.cpp
index daa93d5eb3..b32bbc6270 100644
--- a/src/plugins/baremetal/baremetaldevice.cpp
+++ b/src/plugins/baremetal/baremetaldevice.cpp
@@ -79,13 +79,21 @@ void BareMetalDevice::fromMap(const QVariantMap &map)
IDevice::fromMap(map);
QString gdbServerProvider = map.value(QLatin1String(gdbServerProviderIdKeyC)).toString();
if (gdbServerProvider.isEmpty()) {
- const QSsh::SshConnectionParameters sshParams = sshParameters();
- DefaultGdbServerProvider *newProvider = new DefaultGdbServerProvider;
- newProvider->setDisplayName(displayName());
- newProvider->m_host = sshParams.host;
- newProvider->m_port = sshParams.port;
- GdbServerProviderManager::instance()->registerProvider(newProvider);
- gdbServerProvider = newProvider->id();
+ const QString name = displayName();
+ if (GdbServerProvider *provider =
+ GdbServerProviderManager::instance()->findByDisplayName(name)) {
+ gdbServerProvider = provider->id();
+ } else {
+ const QSsh::SshConnectionParameters sshParams = sshParameters();
+ 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);
}
diff --git a/src/plugins/baremetal/gdbserverprovidermanager.cpp b/src/plugins/baremetal/gdbserverprovidermanager.cpp
index 5f0e8d8881..84207afdae 100644
--- a/src/plugins/baremetal/gdbserverprovidermanager.cpp
+++ b/src/plugins/baremetal/gdbserverprovidermanager.cpp
@@ -172,6 +172,14 @@ GdbServerProvider *GdbServerProviderManager::findProvider(const QString &id) con
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)
{
if (!provider || !m_providers.contains(provider))
diff --git a/src/plugins/baremetal/gdbserverprovidermanager.h b/src/plugins/baremetal/gdbserverprovidermanager.h
index e510feed8f..56a98dd588 100644
--- a/src/plugins/baremetal/gdbserverprovidermanager.h
+++ b/src/plugins/baremetal/gdbserverprovidermanager.h
@@ -56,6 +56,7 @@ public:
QList<GdbServerProvider *> providers() const;
QList<GdbServerProviderFactory *> factories() const;
GdbServerProvider *findProvider(const QString &id) const;
+ GdbServerProvider *findByDisplayName(const QString &displayName) const;
bool registerProvider(GdbServerProvider *);
void deregisterProvider(GdbServerProvider *);