diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2015-08-20 08:48:06 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2015-08-27 10:27:50 +0000 |
commit | 7a7813b1b8b6ac02ad8016d9c5f32031f2d7a795 (patch) | |
tree | 411b6e7ea1e0a38eef14f62d98ae76186e394d52 | |
parent | ced554aaabbad09d1a79691f0a34b9e6e52296a4 (diff) | |
download | qt-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.cpp | 22 | ||||
-rw-r--r-- | src/plugins/baremetal/gdbserverprovidermanager.cpp | 8 | ||||
-rw-r--r-- | src/plugins/baremetal/gdbserverprovidermanager.h | 1 |
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 *); |