From 8c4474b2d0a88d083e330f50856b2306d15f6be7 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 20 Feb 2015 17:55:04 -0800 Subject: [PATCH] more hacking --- interface/src/Application.cpp | 4 ++-- libraries/script-engine/src/ScriptEngine.cpp | 18 +++++++++++------- libraries/script-engine/src/ScriptEngine.h | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ecb74392a6..e7b71afd93 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -540,7 +540,7 @@ void Application::cleanupBeforeQuit() { _entities.shutdown(); // stop all running scripts - ScriptEngine::gracefullyStopAllScripts(); + ScriptEngine::gracefullyStopAllScripts(this); // first stop all timers directly or by invokeMethod @@ -3545,7 +3545,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri connect(workerThread, &QThread::started, scriptEngine, &ScriptEngine::run); // when the thread is terminated, add both scriptEngine and thread to the deleteLater queue - connect(scriptEngine, SIGNAL(finished(const QString&)), scriptEngine, SLOT(deleteLater())); + connect(scriptEngine, SIGNAL(doneRunning()), scriptEngine, SLOT(deleteLater())); connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater())); // when the application is about to quit, stop our script engine so it unwinds properly diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index e4401bd4b4..5cbf0b1149 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -94,6 +94,7 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam _isUserLoaded(false), _arrayBufferClass(new ArrayBufferClass(this)) { + qDebug() << "[" << QThread::currentThread() << "]" << "ScriptEngine::ScriptEngine() " << getFilename() << "[" << this << "]"; _allKnownScriptEngines.insert(this); } @@ -104,28 +105,31 @@ ScriptEngine::~ScriptEngine() { QSet ScriptEngine::_allKnownScriptEngines; -void ScriptEngine::gracefullyStopAllScripts() { +void ScriptEngine::gracefullyStopAllScripts(QObject* application) { qDebug() << "[" << QThread::currentThread() << "]" << "ScriptEngine::gracefullyStopAllScripts() ----------- START ------------------"; - QSet::const_iterator i = _allKnownScriptEngines.constBegin(); - while (i != _allKnownScriptEngines.constEnd()) { - ScriptEngine* scriptEngine = *i; - qDebug() << scriptEngine; + + QSetIterator i(_allKnownScriptEngines); + while (i.hasNext()) { + ScriptEngine* scriptEngine = i.next(); + qDebug() << (void*)scriptEngine; if (scriptEngine->isRunning()) { qDebug() << "scriptEngine still alive:" << scriptEngine->getFilename() << "[" << scriptEngine << "]"; QEventLoop loop; QObject::connect(scriptEngine, &ScriptEngine::doneRunning, &loop, &QEventLoop::quit); + + scriptEngine->disconnect(application); scriptEngine->stop(); qDebug() << "waiting on script to stop... "; loop.exec(); qDebug() << "done waiting... "; + } else { + qDebug() << "WARNING! scriptEngine [" << (void*)scriptEngine << "] still in _allKnownScriptEngines but not running??? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"; } - - ++i; } qDebug() << "[" << QThread::currentThread() << "]" << "ScriptEngine::gracefullyStopAllScripts() ----------- DONE ------------------"; } diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index f3289a8c70..1bd07ba220 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -93,7 +93,7 @@ public: QString getFilename() const; - static void gracefullyStopAllScripts(); + static void gracefullyStopAllScripts(QObject* application); public slots: void loadURL(const QUrl& scriptURL);