History

fix a race when restarting scripts -- avoid the old not-yet-stopped script from being considered the restart script

Seth Alves committed 10 years ago

Commit 4e862941 parent d0c883f2 files · +6 −1Browse files

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

Unified · Split

libraries/script-engine/src/ScriptEngines.cpp+3−1
@@ -351,6 +351,7 @@ void ScriptEngines::stopAllScripts(bool restart) { · 350 unmodified lines
351351 reloadScript(scriptName);
352352 });
353353 }
354+ it.value()->flagAsStopping();
354355 QMetaObject::invokeMethod(it.value(), "stop");
355356 //it.value()->stop();
356357 qCDebug(scriptengine) << "stopping script..." << it.key();
@@ -369,6 +370,7 @@ bool ScriptEngines::stopScript(const QString& rawScriptURL, bool restart) { · 12 unmodified lines
369370 if (_scriptEnginesHash.contains(scriptURL)) {
370371 ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURL];
371372 if (restart) {
373+ scriptEngine->flagAsStopping();
372374 auto scriptCache = DependencyManager::get<ScriptCache>();
373375 scriptCache->deleteScript(scriptURL);
374376 connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {
@@ -454,7 +456,7 @@ ScriptEngine* ScriptEngines::getScriptEngine(const QUrl& rawScriptURL) { · 79 unmodified lines
454456 QReadLocker lock(&_scriptEnginesHashLock);
455457 const QUrl scriptURL = normalizeScriptURL(rawScriptURL);
456458 auto it = _scriptEnginesHash.find(scriptURL);
457− if (it != _scriptEnginesHash.end()) {
459+ if (it != _scriptEnginesHash.end() && !it.value()->isStopping()) {
458460 result = it.value();
459461 }
460462 }