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