summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2021-11-09 09:37:13 -0800
committerEdward Welbourne <edward.welbourne@qt.io>2022-01-21 00:53:49 +0100
commitb7a80512696ea3e10f102ae9195f89b98040dcac (patch)
treee4d47c351b9a41f03c09291626a56d27f81ac19a /src/corelib
parentd5cac0b19bb2a94acae190709783cd5077c3de60 (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.cpp19
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();
}
};
}