Fix concurrency issues for bools in ScriptEngine
Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 4 files). Show all
Unified · Split
| @@ -183,7 +183,7 @@ void ScriptEngine::runInThread() { · 182 unmodified lines | ||
| 183 | 183 | |
| 184 | 184 | QSet<ScriptEngine*> ScriptEngine::_allKnownScriptEngines; |
| 185 | 185 | QMutex ScriptEngine::_allScriptsMutex; |
| 186 | −bool ScriptEngine::_stoppingAllScripts = false; | |
| 186 | +std::atomic<bool> ScriptEngine::_stoppingAllScripts { false }; | |
| 187 | 187 | |
| 188 | 188 | void ScriptEngine::stopAllScripts(QObject* application) { |
| 189 | 189 | _allScriptsMutex.lock(); |
| @@ -752,7 +752,7 @@ void ScriptEngine::run() { · 562 unmodified lines | ||
| 752 | 752 | } |
| 753 | 753 | |
| 754 | 754 | if (_wantSignals) { |
| 755 | − emit finished(_fileNameString); | |
| 755 | + emit finished(_fileNameString, this); | |
| 756 | 756 | } |
| 757 | 757 | |
| 758 | 758 | _isRunning = false; |
| @@ -775,6 +775,10 @@ void ScriptEngine::stopAllTimers() { · 16 unmodified lines | ||
| 775 | 775 | |
| 776 | 776 | void ScriptEngine::stop() { |
| 777 | 777 | if (!_isFinished) { |
| 778 | + if (QThread::currentThread() != thread()) { | |
| 779 | + QMetaObject::invokeMethod(this, "stop"); | |
| 780 | + return; | |
| 781 | + } | |
| 778 | 782 | _isFinished = true; |
| 779 | 783 | if (_wantSignals) { |
| 780 | 784 | emit runningStateChanged(); |