diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2021-11-09 09:37:13 -0800 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2022-01-21 00:53:49 +0100 |
commit | b7a80512696ea3e10f102ae9195f89b98040dcac (patch) | |
tree | e4d47c351b9a41f03c09291626a56d27f81ac19a /src/corelib | |
parent | d5cac0b19bb2a94acae190709783cd5077c3de60 (diff) |
QFactoryLoader: use RAII for QLibraryPrivate
Good style.
Change-Id: I5e52dc5b093c43a3b678fffd16b5f15fddb9d8b4
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/plugin/qfactoryloader.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index 8b98d756ef..dd24ac497e 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -164,6 +164,11 @@ QFactoryLoaderPrivate::~QFactoryLoaderPrivate() inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path) { + struct LibraryReleaser { + void operator()(QLibraryPrivate *library) + { if (library) library->release(); } + }; + // If we've already loaded, skip it... if (loadedPaths.hasSeen(path)) return; @@ -203,11 +208,11 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path) Q_TRACE(QFactoryLoader_update, fileName); - QLibraryPrivate *library = QLibraryPrivate::findOrCreate(QFileInfo(fileName).canonicalFilePath()); + std::unique_ptr<QLibraryPrivate, LibraryReleaser> library; + library.reset(QLibraryPrivate::findOrCreate(QFileInfo(fileName).canonicalFilePath())); if (!library->isPlugin()) { qCDebug(lcFactoryLoader) << library->errorString << Qt::endl << " not a plugin"; - library->release(); continue; } @@ -225,10 +230,8 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path) } qCDebug(lcFactoryLoader) << "Got keys from plugin meta data" << keys; - if (!metaDataOk) { - library->release(); + if (!metaDataOk) continue; - } int keyUsageCount = 0; for (int k = 0; k < keys.count(); ++k) { @@ -244,16 +247,14 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path) prev_qt_version = int(previous->metaData.value(QtPluginMetaDataKeys::QtVersion).toInteger()); int qt_version = int(library->metaData.value(QtPluginMetaDataKeys::QtVersion).toInteger()); if (!previous || (prev_qt_version > QtVersionNoPatch && qt_version <= QtVersionNoPatch)) { - keyMap[key] = library; + keyMap[key] = library.get(); // we WILL .release() ++keyUsageCount; } } if (keyUsageCount || keys.isEmpty()) { library->setLoadHints(QLibrary::PreventUnloadHint); // once loaded, don't unload QMutexLocker locker(&mutex); - libraryList += library; - } else { - library->release(); + libraryList += library.release(); } }; } |