summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp
diff options
context:
space:
mode:
authorPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2021-11-17 18:31:48 +0200
committerPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2021-11-19 13:30:44 +0000
commit7490937609dc6a46ab33dc7195ab78e02bd50e1d (patch)
tree2cfd9c65321bdf5a1faa59e263f729d74ec4aba1 /tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp
parenta4dca9936d91008986e021a794bcdf3e36f6db9d (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.cpp21
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);