Merge PR #603: Fix a crash when the same plugin file is loaded twice

This commit is contained in:
jenkins 2022-12-13 21:05:02 +01:00
commit ff1a841352
2 changed files with 9 additions and 5 deletions

View File

@ -1426,7 +1426,11 @@ void ThingManagerImplementation::loadPlugins()
if (m_integrationPlugins.contains(plugin->pluginId())) {
qCWarning(dcThingManager()) << "A plugin with this ID is already loaded. Not loading" << entry << plugin->pluginId();
delete plugin;
// Depending on the plugin type, duplicate loading of the same plugin file may return the same instance. In which
// case we do *not* want to delete it, but we want to delete the dupe if a new instance has been created with the same ID.
if (m_integrationPlugins.value(plugin->pluginId()) != plugin) {
delete plugin;
}
continue;
}
loadPlugin(plugin);

View File

@ -220,7 +220,7 @@ QVariantList NymeaTestBase::checkNotifications(const QSignalSpy &spy, const QStr
QVariant NymeaTestBase::getAndWait(const QNetworkRequest &request, const int &expectedStatus)
{
QNetworkAccessManager nam;
connect(&nam, &QNetworkAccessManager::sslErrors, [&nam](QNetworkReply *reply, const QList<QSslError> &) {
connect(&nam, &QNetworkAccessManager::sslErrors, [](QNetworkReply *reply, const QList<QSslError> &) {
reply->ignoreSslErrors();
});
QSignalSpy clientSpy(&nam, SIGNAL(finished(QNetworkReply*)));
@ -258,7 +258,7 @@ QVariant NymeaTestBase::getAndWait(const QNetworkRequest &request, const int &ex
QVariant NymeaTestBase::deleteAndWait(const QNetworkRequest &request, const int &expectedStatus)
{
QNetworkAccessManager nam;
connect(&nam, &QNetworkAccessManager::sslErrors, [this, &nam](QNetworkReply *reply, const QList<QSslError> &) {
connect(&nam, &QNetworkAccessManager::sslErrors, [](QNetworkReply *reply, const QList<QSslError> &) {
reply->ignoreSslErrors();
});
QSignalSpy clientSpy(&nam, SIGNAL(finished(QNetworkReply*)));
@ -293,7 +293,7 @@ QVariant NymeaTestBase::deleteAndWait(const QNetworkRequest &request, const int
QVariant NymeaTestBase::postAndWait(const QNetworkRequest &request, const QVariant &params, const int &expectedStatus)
{
QNetworkAccessManager nam;
connect(&nam, &QNetworkAccessManager::sslErrors, [this, &nam](QNetworkReply *reply, const QList<QSslError> &) {
connect(&nam, &QNetworkAccessManager::sslErrors, [](QNetworkReply *reply, const QList<QSslError> &) {
reply->ignoreSslErrors();
});
QSignalSpy clientSpy(&nam, SIGNAL(finished(QNetworkReply*)));
@ -333,7 +333,7 @@ QVariant NymeaTestBase::postAndWait(const QNetworkRequest &request, const QVaria
QVariant NymeaTestBase::putAndWait(const QNetworkRequest &request, const QVariant &params, const int &expectedStatus)
{
QNetworkAccessManager nam;
connect(&nam, &QNetworkAccessManager::sslErrors, [this, &nam](QNetworkReply *reply, const QList<QSslError> &) {
connect(&nam, &QNetworkAccessManager::sslErrors, [](QNetworkReply *reply, const QList<QSslError> &) {
reply->ignoreSslErrors();
});
QSignalSpy clientSpy(&nam, SIGNAL(finished(QNetworkReply*)));