Avoid double-lookup in QLibraryStore::findOrCreate()

The code is in a critical section, so don't waste time traversing the
QMap twice.

Now that two previous commits have re-arranged the code such that
lookup and insertion are symmetric, we can combine them into a single
lookup using operator[].

Pick-to: 6.6 6.5
Change-Id: I4a10cece65b8c35d05a9b80967bf15d2e15bd73f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 7192b1184190982b6422196121821838d9fcbba6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2024-02-07 22:06:26 +01:00 committed by Qt Cherry-pick Bot
parent 39e9b6b24c
commit 25649bcd3b

View File

@ -414,18 +414,15 @@ inline QLibraryPrivate *QLibraryStore::findOrCreate(const QString &fileName, con
QString mapName = version.isEmpty() ? fileName : fileName + u'\0' + version; QString mapName = version.isEmpty() ? fileName : fileName + u'\0' + version;
// check if this library is already loaded QLibraryPrivate *&lib = data->libraryMap[std::move(mapName)];
QLibraryPrivate *lib = data->libraryMap.value(mapName);
if (lib) { if (lib) {
// already loaded
lib->libraryRefCount.ref(); lib->libraryRefCount.ref();
lib->mergeLoadHints(loadHints); lib->mergeLoadHints(loadHints);
} else { } else {
lib = lazyNewLib(); lib = lazyNewLib();
} }
// track this library
data->libraryMap.insert(mapName, lib);
return lib; return lib;
} }