reuse QLibrary instances that are not unloaded

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-06-12 09:22:23 +03:00
parent 6ccc7ba7fc
commit 86ca6fb3e1

View file

@ -600,7 +600,23 @@ void QLibrary::setFileNameAndVersion(const QString &fileName, int verNum)
*/
void QLibrary::setFileNameAndVersion(const QString &fileName, const QString &version)
{
d_ptr->fileName = qt_find_library(fileName, version);
QMutexLocker locker(qGlobalLibraryMutex());
// if the library path is not the same it may very well be library with different symbols
const QString librarymatch = qt_find_library(fileName, version);
QLibraryCleanup* loadedlibraries = qGlobalLibraryList();
for (int i = 0; i < loadedlibraries->size(); i++) {
QLibraryPrivate* loadedlibrary = loadedlibraries->at(i);
if (loadedlibrary->fileName == librarymatch) {
if (qt_debug_component()) {
qDebug() << "QLibrary: reusing library" << librarymatch;
}
delete d_ptr;
d_ptr = loadedlibrary;
loadedlibraries->removeAt(i);
return;
}
}
d_ptr->fileName = librarymatch;
}
/*!