diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 062a8fa9c1..1803b5e19f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2761,7 +2761,6 @@ void Application::cleanupBeforeQuit() { } getEntities()->shutdown(); // tell the entities system we're shutting down, so it will stop running scripts - getEntities()->clear(); // Clear any queued processing (I/O, FBX/OBJ/Texture parsing) QThreadPool::globalInstance()->clear(); diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 305384361d..fd82567a94 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -253,7 +253,7 @@ void EntityTreeRenderer::clear() { // unload and stop the engine if (_entitiesScriptEngine) { // do this here (instead of in deleter) to avoid marshalling unload signals back to this thread - _entitiesScriptEngine->unloadAllEntityScripts(); + _entitiesScriptEngine->unloadAllEntityScripts(true); _entitiesScriptEngine->stop(); } diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 5e20f06a7f..6808da2e1a 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -2470,13 +2470,14 @@ QList ScriptEngine::getListOfEntityScriptIDs() { return _entityScripts.keys(); } -void ScriptEngine::unloadAllEntityScripts() { +void ScriptEngine::unloadAllEntityScripts(bool blockingCall) { if (QThread::currentThread() != thread()) { #ifdef THREAD_DEBUGGING qCDebug(scriptengine) << "*** WARNING *** ScriptEngine::unloadAllEntityScripts() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "]"; #endif - QMetaObject::invokeMethod(this, "unloadAllEntityScripts"); + QMetaObject::invokeMethod(this, "unloadAllEntityScripts", + blockingCall ? Qt::BlockingQueuedConnection : Qt::QueuedConnection); return; } #ifdef THREAD_DEBUGGING diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 52ece63dc2..d738b13ecc 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -578,9 +578,10 @@ public: /**jsdoc * @function Script.unloadAllEntityScripts + * @param {boolean} [blockingCall=false] - Wait for completion if call moved to another thread. * @deprecated This function is deprecated and will be removed. */ - Q_INVOKABLE void unloadAllEntityScripts(); + Q_INVOKABLE void unloadAllEntityScripts(bool blockingCall = false); /**jsdoc * Calls a method in an entity script.