summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qpermissions_darwin.mm8
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp15
2 files changed, 13 insertions, 10 deletions
diff --git a/src/corelib/kernel/qpermissions_darwin.mm b/src/corelib/kernel/qpermissions_darwin.mm
index ed45899543a..9753fc38845 100644
--- a/src/corelib/kernel/qpermissions_darwin.mm
+++ b/src/corelib/kernel/qpermissions_darwin.mm
@@ -38,14 +38,6 @@ QPermissionPlugin *permissionPlugin(const QPermission &permission)
auto className = metaDataList.at(i).value(QtPluginMetaDataKeys::ClassName).toString();
qCDebug(lcPermissions) << "Found matching plugin" << qUtf8Printable(className);
auto *plugin = static_cast<QPermissionPlugin*>(pluginLoader()->instance(i));
- if (!plugin->parent()) {
- // Also, as setParent will involve sending a ChildAdded event to the parent,
- // we need to make the call on the same thread as the parent lives, as events
- // are not allowed to be sent to an object owned by another thread.
- QMetaObject::invokeMethod(plugin, [=] {
- plugin->setParent(pluginLoader);
- });
- }
return plugin;
}
}
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index a7ce5994213..d0bb673e537 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -257,6 +257,7 @@ public:
QFactoryLoaderPrivate() { }
QByteArray iid;
mutable QMutex mutex;
+ mutable QList<QtPluginInstanceFunction> usedStaticInstances;
#if QT_CONFIG(library)
~QFactoryLoaderPrivate();
QDuplicateTracker<QString> loadedPaths;
@@ -438,6 +439,11 @@ QFactoryLoader::~QFactoryLoader()
}
}
#endif
+
+ for (QtPluginInstanceFunction staticInstance : d->usedStaticInstances) {
+ if (staticInstance)
+ delete staticInstance();
+ }
}
#if defined(Q_OS_UNIX) && !defined (Q_OS_DARWIN)
@@ -604,14 +610,19 @@ inline QObject *QFactoryLoader::instanceHelper_locked(int index) const
QLatin1StringView iid(d->iid.constData(), d->iid.size());
const QList<QStaticPlugin> staticPlugins = QPluginLoader::staticPlugins();
+ qsizetype i = 0;
for (QStaticPlugin plugin : staticPlugins) {
QByteArrayView pluginData(static_cast<const char *>(plugin.rawMetaData), plugin.rawMetaDataSize);
if (!isIidMatch(pluginData, iid))
continue;
- if (index == 0)
+ if (i == index) {
+ if (d->usedStaticInstances.size() <= i)
+ d->usedStaticInstances.resize(i + 1);
+ d->usedStaticInstances[i] = plugin.instance;
return plugin.instance();
- --index;
+ }
+ ++i;
}
return nullptr;