diff options
author | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2021-11-17 18:31:48 +0200 |
---|---|---|
committer | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2021-11-19 13:30:44 +0000 |
commit | 7490937609dc6a46ab33dc7195ab78e02bd50e1d (patch) | |
tree | 2cfd9c65321bdf5a1faa59e263f729d74ec4aba1 /tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp | |
parent | a4dca9936d91008986e021a794bcdf3e36f6db9d (diff) |
Fix test when accessing patched plugin too fast
At least one OS (QNX) can't dlopen() a library that is still
open for writing elsewhere
Pick-to: 6.2
Change-Id: I2d4425d8c69162cdfa43c2523c7459def7839eb9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp')
-rw-r--r-- | tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp b/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp index 7d95004709..8994835471 100644 --- a/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp +++ b/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp @@ -34,6 +34,7 @@ #include <qendian.h> #include <qpluginloader.h> #include <qtemporaryfile.h> +#include <QScopeGuard> #include "theplugin/plugininterface.h" #if defined(QT_BUILD_INTERNAL) && defined(Q_OF_MACH_O) @@ -983,11 +984,25 @@ void tst_QPluginLoader::loadSectionTableStrippedElf() f->seek(f->size()); f->write(reinterpret_cast<const char *>(&badHeader), sizeof(badHeader)); } }; - std::unique_ptr<QTemporaryFile> tmplib = - patchElf(sys_qualifiedLibraryName("theplugin"), patcher); + + QString tmpLibName; + { + std::unique_ptr<QTemporaryFile> tmplib = + patchElf(sys_qualifiedLibraryName("theplugin"), patcher); + + tmpLibName = tmplib->fileName(); + tmplib->setAutoRemove(false); + } +#if defined(Q_OS_QNX) + // On QNX plugin access is still too early, even when QTemporaryFile is closed + QTest::qSleep(1000); +#endif + auto removeTmpLib = qScopeGuard([=]{ + QFile::remove(tmpLibName); + }); // now attempt to load it - QPluginLoader loader(tmplib->fileName()); + QPluginLoader loader(tmpLibName); QVERIFY2(loader.load(), qPrintable(loader.errorString())); PluginInterface *instance = qobject_cast<PluginInterface*>(loader.instance()); QVERIFY(instance); |