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
351 reloadScript(scriptName);351 reloadScript(scriptName);
352 });352 });
353 }353 }
354 it.value()->flagAsStopping();
354 QMetaObject::invokeMethod(it.value(), "stop");355 QMetaObject::invokeMethod(it.value(), "stop");
355 //it.value()->stop();356 //it.value()->stop();
356 qCDebug(scriptengine) << "stopping script..." << it.key();357 qCDebug(scriptengine) << "stopping script..." << it.key();
@@ -369,6 +370,7 @@ bool ScriptEngines::stopScript(const QString& rawScriptURL, bool restart) { · 12 unmodified lines
369 if (_scriptEnginesHash.contains(scriptURL)) {370 if (_scriptEnginesHash.contains(scriptURL)) {
370 ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURL];371 ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURL];
371 if (restart) {372 if (restart) {
373 scriptEngine->flagAsStopping();
372 auto scriptCache = DependencyManager::get<ScriptCache>();374 auto scriptCache = DependencyManager::get<ScriptCache>();
373 scriptCache->deleteScript(scriptURL);375 scriptCache->deleteScript(scriptURL);
374 connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {376 connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) {
@@ -454,7 +456,7 @@ ScriptEngine* ScriptEngines::getScriptEngine(const QUrl& rawScriptURL) { · 79 unmodified lines
454 QReadLocker lock(&_scriptEnginesHashLock);456 QReadLocker lock(&_scriptEnginesHashLock);
455 const QUrl scriptURL = normalizeScriptURL(rawScriptURL);457 const QUrl scriptURL = normalizeScriptURL(rawScriptURL);
456 auto it = _scriptEnginesHash.find(scriptURL);458 auto it = _scriptEnginesHash.find(scriptURL);
457 if (it != _scriptEnginesHash.end()) {459 if (it != _scriptEnginesHash.end() && !it.value()->isStopping()) {
458 result = it.value();460 result = it.value();
459 }461 }
460 }462 }