more hacking

This commit is contained in:
ZappoMan 2015-02-20 17:55:04 -08:00
parent b219937902
commit 8c4474b2d0
3 changed files with 14 additions and 10 deletions

View file

@ -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

View file

@ -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*> ScriptEngine::_allKnownScriptEngines;
void ScriptEngine::gracefullyStopAllScripts() {
void ScriptEngine::gracefullyStopAllScripts(QObject* application) {
qDebug() << "[" << QThread::currentThread() << "]" << "ScriptEngine::gracefullyStopAllScripts() ----------- START ------------------";
QSet<ScriptEngine*>::const_iterator i = _allKnownScriptEngines.constBegin();
while (i != _allKnownScriptEngines.constEnd()) {
ScriptEngine* scriptEngine = *i;
qDebug() << scriptEngine;
QSetIterator<ScriptEngine*> 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 ------------------";
}

View file

@ -93,7 +93,7 @@ public:
QString getFilename() const;
static void gracefullyStopAllScripts();
static void gracefullyStopAllScripts(QObject* application);
public slots:
void loadURL(const QUrl& scriptURL);