Merge pull request #15322 from huffman/fix/interactive-window-shutdown-crash

Case 18299: Fix ScriptEngine not being destroyed on its own thread
This commit is contained in:
Ryan Huffman 2019-04-04 15:00:50 -07:00 committed by GitHub
commit b9c81a3899
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -163,7 +163,7 @@ ScriptEnginePointer scriptEngineFactory(ScriptEngine::Context context,
const QString& scriptContents,
const QString& fileNameString) {
ScriptEngine* engine = new ScriptEngine(context, scriptContents, fileNameString);
ScriptEnginePointer engineSP = ScriptEnginePointer(engine);
ScriptEnginePointer engineSP = ScriptEnginePointer(engine, &QObject::deleteLater);
auto scriptEngines = DependencyManager::get<ScriptEngines>();
scriptEngines->addScriptEngine(qSharedPointerCast<ScriptEngine>(engineSP));
engine->setScriptEngines(scriptEngines);
@ -267,7 +267,7 @@ void ScriptEngine::disconnectNonEssentialSignals() {
QThread* workerThread;
// Ensure the thread should be running, and does exist
if (_isRunning && _isThreaded && (workerThread = thread())) {
connect(this, &ScriptEngine::doneRunning, workerThread, &QThread::quit);
connect(this, &QObject::destroyed, workerThread, &QThread::quit);
connect(workerThread, &QThread::finished, workerThread, &QObject::deleteLater);
}
}
@ -381,7 +381,7 @@ void ScriptEngine::runInThread() {
// the script engine, make sure to add code to "reconnect" them to the
// disconnectNonEssentialSignals() method
connect(workerThread, &QThread::started, this, &ScriptEngine::run);
connect(this, &ScriptEngine::doneRunning, workerThread, &QThread::quit);
connect(this, &QObject::destroyed, workerThread, &QThread::quit);
connect(workerThread, &QThread::finished, workerThread, &QObject::deleteLater);
workerThread->start();