mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 01:24:03 +02:00
more hacking
This commit is contained in:
parent
b219937902
commit
8c4474b2d0
3 changed files with 14 additions and 10 deletions
|
@ -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
|
||||
|
|
|
@ -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 ------------------";
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
QString getFilename() const;
|
||||
|
||||
static void gracefullyStopAllScripts();
|
||||
static void gracefullyStopAllScripts(QObject* application);
|
||||
|
||||
public slots:
|
||||
void loadURL(const QUrl& scriptURL);
|
||||
|
|
Loading…
Reference in a new issue