From 1e710712ccd70cfe8895be8605262f97d46b743b Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 6 Apr 2016 11:12:05 -0700 Subject: [PATCH 1/2] Check entities scripting thread before signaling it --- libraries/entities-renderer/src/EntityTreeRenderer.cpp | 4 ++-- libraries/script-engine/src/ScriptEngine.cpp | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index b87329d5b6..eab28f500a 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -71,8 +71,8 @@ EntityTreeRenderer::EntityTreeRenderer(bool wantScripts, AbstractViewStateInterf } EntityTreeRenderer::~EntityTreeRenderer() { - // NOTE: we don't need to delete _entitiesScriptEngine because it is registered with the application and has a - // signal tied to call it's deleteLater on doneRunning + // NOTE: We don't need to delete _entitiesScriptEngine because + // it is registered with ScriptEngines, which will call deleteLater for us. } void EntityTreeRenderer::clear() { diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 31047dd423..e03d577300 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -154,7 +154,9 @@ ScriptEngine::~ScriptEngine() { void ScriptEngine::disconnectNonEssentialSignals() { disconnect(); - connect(this, &ScriptEngine::doneRunning, thread(), &QThread::quit); + if (_isRunning && _isThreaded) { // ensure the thread is running + connect(this, &ScriptEngine::doneRunning, thread(), &QThread::quit); + } } void ScriptEngine::runInThread() { From 06e827cb5ea4ef5215252bb7c8c0cc86f1f4a5c5 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 6 Apr 2016 14:40:55 -0700 Subject: [PATCH 2/2] Guard against no script engine thread affinity --- libraries/script-engine/src/ScriptEngine.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index e03d577300..4904c0d1de 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -154,8 +154,10 @@ ScriptEngine::~ScriptEngine() { void ScriptEngine::disconnectNonEssentialSignals() { disconnect(); - if (_isRunning && _isThreaded) { // ensure the thread is running - connect(this, &ScriptEngine::doneRunning, thread(), &QThread::quit); + QThread* receiver; + // Ensure the thread should be running, and does exist + if (_isRunning && _isThreaded && (receiver = thread())) { + connect(this, &ScriptEngine::doneRunning, receiver, &QThread::quit); } }