mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Merge pull request #13497 from hyperlogic/bug-fix/script-engine-batchloader-memory-corruption-fix
Fix memory corruption when running scripts using Script.require().
This commit is contained in:
commit
a5919ee3fa
1 changed files with 11 additions and 9 deletions
|
@ -1639,22 +1639,24 @@ QVariantMap ScriptEngine::fetchModuleSource(const QString& modulePath, const boo
|
|||
loader->start(MAX_RETRIES);
|
||||
|
||||
if (!loader->isFinished()) {
|
||||
QTimer monitor;
|
||||
QEventLoop loop;
|
||||
QObject::connect(loader, &BatchLoader::finished, this, [&monitor, &loop]{
|
||||
monitor.stop();
|
||||
loop.quit();
|
||||
// This lambda can get called AFTER this local scope has completed.
|
||||
// This is why we pass smart ptrs to the lambda instead of references to local variables.
|
||||
auto monitor = std::make_shared<QTimer>();
|
||||
auto loop = std::make_shared<QEventLoop>();
|
||||
QObject::connect(loader, &BatchLoader::finished, this, [monitor, loop] {
|
||||
monitor->stop();
|
||||
loop->quit();
|
||||
});
|
||||
|
||||
// this helps detect the case where stop() is invoked during the download
|
||||
// but not seen in time to abort processing in onload()...
|
||||
connect(&monitor, &QTimer::timeout, this, [this, &loop]{
|
||||
connect(monitor.get(), &QTimer::timeout, this, [this, loop] {
|
||||
if (isStopping()) {
|
||||
loop.exit(-1);
|
||||
loop->exit(-1);
|
||||
}
|
||||
});
|
||||
monitor.start(500);
|
||||
loop.exec();
|
||||
monitor->start(500);
|
||||
loop->exec();
|
||||
}
|
||||
loader->deleteLater();
|
||||
return req;
|
||||
|
|
Loading…
Reference in a new issue