Showing the changes to libraries/script-engine/src/ScriptEngines.cpp (1 of 6 files). Show all
Unified · Split
| @@ -160,7 +160,7 @@ void ScriptEngines::shutdownScripting() { · 159 unmodified lines | ||
| 160 | 160 | scriptEngine->disconnect(this); |
| 161 | 161 | |
| 162 | 162 | // Gracefully stop the engine's scripting thread |
| 163 | − scriptEngine->stop(); | |
| 163 | + scriptEngine->stop(false); | |
| 164 | 164 | |
| 165 | 165 | // We need to wait for the engine to be done running before we proceed, because we don't |
| 166 | 166 | // want any of the scripts final "scriptEnding()" or pending "update()" methods from accessing |
| @@ -359,7 +359,10 @@ QStringList ScriptEngines::getRunningScripts() { · 192 unmodified lines | ||
| 359 | 359 | QList<QUrl> urls = _scriptEnginesHash.keys(); |
| 360 | 360 | QStringList result; |
| 361 | 361 | for (auto url : urls) { |
| 362 | − result.append(url.toString()); | |
| 362 | + ScriptEngine* engine = getScriptEngineInternal(url); | |
| 363 | + if (engine) { | |
| 364 | + result.append(url.toString()); | |
| 365 | + } | |
| 363 | 366 | } |
| 364 | 367 | return result; |
| 365 | 368 | } |
| @@ -388,7 +391,7 @@ void ScriptEngines::stopAllScripts(bool restart) { · 22 unmodified lines | ||
| 388 | 391 | reloadScript(scriptName); |
| 389 | 392 | }); |
| 390 | 393 | } |
| 391 | − it.value()->stop(); | |
| 394 | + it.value()->stop(true); | |
| 392 | 395 | qCDebug(scriptengine) << "stopping script..." << it.key(); |
| 393 | 396 | } |
| 394 | 397 | } |
| @@ -411,7 +414,7 @@ bool ScriptEngines::stopScript(const QString& rawScriptURL, bool restart) { · 16 unmodified lines | ||
| 411 | 414 | reloadScript(scriptName); |
| 412 | 415 | }); |
| 413 | 416 | } |
| 414 | − scriptEngine->stop(); | |
| 417 | + scriptEngine->stop(false); | |
| 415 | 418 | stoppedScript = true; |
| 416 | 419 | qCDebug(scriptengine) << "stopping script..." << scriptURL; |
| 417 | 420 | } |
| @@ -459,7 +462,7 @@ ScriptEngine* ScriptEngines::loadScript(const QUrl& scriptFilename, bool isUserL · 41 unmodified lines | ||
| 459 | 462 | } |
| 460 | 463 | |
| 461 | 464 | auto scriptEngine = getScriptEngine(scriptUrl); |
| 462 | − if (scriptEngine) { | |
| 465 | + if (scriptEngine && !scriptEngine->isStopping()) { | |
| 463 | 466 | return scriptEngine; |
| 464 | 467 | } |
| 465 | 468 | |
| @@ -484,19 +487,21 @@ ScriptEngine* ScriptEngines::loadScript(const QUrl& scriptFilename, bool isUserL · 18 unmodified lines | ||
| 484 | 487 | return scriptEngine; |
| 485 | 488 | } |
| 486 | 489 | |
| 487 | −ScriptEngine* ScriptEngines::getScriptEngine(const QUrl& rawScriptURL) { | |
| 490 | +ScriptEngine* ScriptEngines::getScriptEngineInternal(const QUrl& rawScriptURL) { | |
| 488 | 491 | ScriptEngine* result = nullptr; |
| 489 | − { | |
| 490 | − QReadLocker lock(&_scriptEnginesHashLock); | |
| 491 | − const QUrl scriptURL = normalizeScriptURL(rawScriptURL); | |
| 492 | − auto it = _scriptEnginesHash.find(scriptURL); | |
| 493 | − if (it != _scriptEnginesHash.end() && !it.value()->isStopping()) { | |
| 494 | − result = it.value(); | |
| 495 | − } | |
| 492 | + const QUrl scriptURL = normalizeScriptURL(rawScriptURL); | |
| 493 | + auto it = _scriptEnginesHash.find(scriptURL); | |
| 494 | + if (it != _scriptEnginesHash.end()) { | |
| 495 | + result = it.value(); | |
| 496 | 496 | } |
| 497 | 497 | return result; |
| 498 | 498 | } |
| 499 | 499 | |
| 500 | +ScriptEngine* ScriptEngines::getScriptEngine(const QUrl& rawScriptURL) { | |
| 501 | + QReadLocker lock(&_scriptEnginesHashLock); | |
| 502 | + return getScriptEngineInternal(rawScriptURL); | |
| 503 | +} | |
| 504 | + | |
| 500 | 505 | // FIXME - change to new version of ScriptCache loading notification |
| 501 | 506 | void ScriptEngines::onScriptEngineLoaded(const QString& rawScriptURL) { |
| 502 | 507 | UserActivityLogger::getInstance().loadedScript(rawScriptURL); |