diff options
| author | Dominik Holland <dominik.holland@qt.io> | 2023-07-14 14:47:32 +0200 |
|---|---|---|
| committer | Dominik Holland <dominik.holland@qt.io> | 2023-07-14 14:49:26 +0200 |
| commit | 3ac2448d1470cc0b52433bfc3d6541710af79bb2 (patch) | |
| tree | b7f493942c6a2c2a174ac8d8972625a3978f9f4d /src/interfaceframework/qifservicemanager.cpp | |
| parent | d5bff9acb96427f4e6c99ff2cb0b7ae6c0a36647 (diff) | |
QIfServiceManager: Improve the backend unloading code
For autotests we support unloading all our backends.
Unloading plugins can lead to various errors. Instead of really
unloading the plugin, just destroy the plugin instances, the
actual plugin and all it libraries will stay loaded.
Pick-to: 6.2 6.5 6.6
Change-Id: Ie4429ee8c7958cdff6ceb82cf5e587f6a2a398a0
Reviewed-by: Robert Griebl <robert.griebl@qt.io>
Diffstat (limited to 'src/interfaceframework/qifservicemanager.cpp')
| -rw-r--r-- | src/interfaceframework/qifservicemanager.cpp | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/src/interfaceframework/qifservicemanager.cpp b/src/interfaceframework/qifservicemanager.cpp index e6f5edd8..4a1a8b35 100644 --- a/src/interfaceframework/qifservicemanager.cpp +++ b/src/interfaceframework/qifservicemanager.cpp @@ -63,6 +63,13 @@ namespace qtif_helper { using namespace qtif_helper; +Backend::~Backend() +{ + delete interface; + delete proxyServiceObject; + delete loader; +} + QIfServiceManagerPrivate::QIfServiceManagerPrivate(QIfServiceManager *parent) : QObject(parent) , m_staticLoaded(false) @@ -239,10 +246,6 @@ void QIfServiceManagerPrivate::registerBackend(const QString &fileName, const QJ backend->name = metaData.value(classNameLiteral).toString(); backend->debug = metaData.value(debugLiteral).toBool(); backend->metaData = backendMetaData; - backend->interface = nullptr; - backend->interfaceObject = nullptr; - backend->loader = nullptr; - backend->proxyServiceObject = nullptr; addBackend(backend); } @@ -268,9 +271,6 @@ void QIfServiceManagerPrivate::registerStaticBackend(QStaticPlugin plugin) backend->debug = plugin.metaData().value(debugLiteral).toBool(); backend->metaData = backendMetaData; backend->interface = backendInterface; - backend->interfaceObject = nullptr; - backend->loader = nullptr; - backend->proxyServiceObject = nullptr; addBackend(backend); } @@ -294,12 +294,8 @@ bool QIfServiceManagerPrivate::registerBackend(QObject *serviceBackendInterface, auto *backend = new Backend; backend->name = QString::fromLocal8Bit(serviceBackendInterface->metaObject()->className()); - backend->debug = false; backend->metaData = metaData; backend->interface = interface; - backend->interfaceObject = serviceBackendInterface; - backend->loader = nullptr; - backend->proxyServiceObject = nullptr; addBackend(backend); return true; @@ -316,14 +312,6 @@ void QIfServiceManagerPrivate::unloadAllBackends() QIfConfigurationManager::instance()->removeServiceObject(configurationId, backend->proxyServiceObject); } - //If the Interface is from a Plugin, the Plugin owns it and it will be deleted when unloading. - //Otherwise we own the Interface and delete the Pointer. - if (backend->loader) { - backend->loader->unload(); - delete backend->loader; - } - delete backend->interfaceObject; - delete backend->proxyServiceObject; delete backend; } m_backends.clear(); |
