History

first cut at shutting down scripts ahead of other cleanup

ZappoMan committed 11 years ago

Commit 0b607fa1 parent 70400f75 files · +268 −146Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 5 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+55−3
@@ -94,8 +94,45 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam · 93 unmodified lines
9494 _isUserLoaded(false),
9595 _arrayBufferClass(new ArrayBufferClass(this))
9696 {
97+ _allKnownScriptEngines.insert(this);
9798 }
9899
100+ScriptEngine::~ScriptEngine() {
101+ qDebug() << "[" << QThread::currentThread() << "]" << "ScriptEngine::~ScriptEngine() " << getFilename();
102+ _allKnownScriptEngines.remove(this);
103+}
104+
105+QSet<ScriptEngine*> ScriptEngine::_allKnownScriptEngines;
106+
107+void ScriptEngine::gracefullyStopAllScripts() {
108+ qDebug() << "[" << QThread::currentThread() << "]" << "ScriptEngine::gracefullyStopAllScripts() ----------- START ------------------";
109+ foreach(ScriptEngine* scriptEngine, _allKnownScriptEngines) {
110+ if (scriptEngine->isRunning()) {
111+ qDebug() << "scriptEngine still alive:" << scriptEngine->getFilename() << "[" << scriptEngine << "]";
112+
113+ QEventLoop loop;
114+ QObject::connect(scriptEngine, &ScriptEngine::doneRunning, &loop, &QEventLoop::quit);
115+
116+ scriptEngine->stop();
117+
118+ qDebug() << "waiting on script to stop... ";
119+ loop.exec();
120+ qDebug() << "done waiting... ";
121+ }
122+ }
123+ qDebug() << "[" << QThread::currentThread() << "]" << "ScriptEngine::gracefullyStopAllScripts() ----------- DONE ------------------";
124+}
125+
126+QString ScriptEngine::getFilename() const {
127+ QStringList fileNameParts = _fileNameString.split("/");
128+ QString lastPart;
129+ if (!fileNameParts.isEmpty()) {
130+ lastPart = fileNameParts.last();
131+ }
132+ return lastPart;
133+}
134+
135+
99136 void ScriptEngine::setIsAvatar(bool isAvatar) {
100137 _isAvatar = isAvatar;
101138
@@ -364,16 +401,18 @@ void ScriptEngine::run() { · 262 unmodified lines
364401 }
365402
366403 if (_isFinished) {
404+ qDebug() << "ScriptEngine::run()... while() about to break " << getFilename();
367405 break;
368406 }
369407
370408 QCoreApplication::processEvents();
371409
372410 if (_isFinished) {
411+ qDebug() << "ScriptEngine::run()... while() about to break " << getFilename();
373412 break;
374413 }
375414
376− if (_entityScriptingInterface.getEntityPacketSender()->serversExist()) {
415+ if (!_isFinished && _entityScriptingInterface.getEntityPacketSender()->serversExist()) {
377416 // release the queue of edit entity messages.
378417 _entityScriptingInterface.getEntityPacketSender()->releaseQueuedMessages();
379418
@@ -383,7 +422,7 @@ void ScriptEngine::run() { · 3 unmodified lines
383422 }
384423 }
385424
386− if (_isAvatar && _avatarData) {
425+ if (!_isFinished && _isAvatar && _avatarData) {
387426
388427 const int SCRIPT_AUDIO_BUFFER_SAMPLES = floor(((SCRIPT_DATA_CALLBACK_USECS * AudioConstants::SAMPLE_RATE)
389428 / (1000 * 1000)) + 0.5);
@@ -493,9 +532,13 @@ void ScriptEngine::run() { · 103 unmodified lines
493532 clearExceptions();
494533 }
495534
496− emit update(deltaTime);
535+ if (!_isFinished) {
536+ //qDebug() << "ScriptEngine::run()... about to emit update() _scriptName:" << _scriptName << "_fileNameString:" << _fileNameString << "_isFinished:" << _isFinished;
537+ emit update(deltaTime);
538+ }
497539 lastUpdate = now;
498540 }
541+ qDebug() << "ScriptEngine::run()... about to emit scriptEnding() " << getFilename();
499542 emit scriptEnding();
500543
501544 // kill the avatar identity timer
@@ -513,16 +556,25 @@ void ScriptEngine::run() { · 11 unmodified lines
513556
514557 // If we were on a thread, then wait till it's done
515558 if (thread()) {
559+ qDebug() << "ScriptEngine::run()... about to call thread()->quit() " << getFilename();
516560 thread()->quit();
517561 }
518562
563+ qDebug() << "ScriptEngine::run()... about to emit finished() " << getFilename();
519564 emit finished(_fileNameString);
520565
521566 _isRunning = false;
567+
568+ qDebug() << "ScriptEngine::run()... about to emit runningStateChanged() " << getFilename();
522569 emit runningStateChanged();
570+
571+ qDebug() << "ScriptEngine::run()... about to emit doneRunning() " << getFilename();
572+ emit doneRunning();
573+ qDebug() << "ScriptEngine::run()... DONE WITH run()... " << getFilename();
523574 }
524575
525576 void ScriptEngine::stop() {
577+ qDebug() << "ScriptEngine::stop()... " << getFilename();
526578 _isFinished = true;
527579 emit runningStateChanged();
528580 }