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 | QSet<ScriptEngine*> ScriptEngine::_allKnownScriptEngines; | 184 | QSet<ScriptEngine*> ScriptEngine::_allKnownScriptEngines; |
| 185 | QMutex ScriptEngine::_allScriptsMutex; | 185 | QMutex ScriptEngine::_allScriptsMutex; |
| 186 | bool ScriptEngine::_stoppingAllScripts = false; | 186 | std::atomic<bool> ScriptEngine::_stoppingAllScripts { false }; |
| 187 | 187 | ||
| 188 | void ScriptEngine::stopAllScripts(QObject* application) { | 188 | void ScriptEngine::stopAllScripts(QObject* application) { |
| 189 | _allScriptsMutex.lock(); | 189 | _allScriptsMutex.lock(); |
| @@ -752,7 +752,7 @@ void ScriptEngine::run() { · 562 unmodified lines | |||
| 752 | } | 752 | } |
| 753 | 753 | ||
| 754 | if (_wantSignals) { | 754 | if (_wantSignals) { |
| 755 | emit finished(_fileNameString); | 755 | emit finished(_fileNameString, this); |
| 756 | } | 756 | } |
| 757 | 757 | ||
| 758 | _isRunning = false; | 758 | _isRunning = false; |
| @@ -775,6 +775,10 @@ void ScriptEngine::stopAllTimers() { · 16 unmodified lines | |||
| 775 | 775 | ||
| 776 | void ScriptEngine::stop() { | 776 | void ScriptEngine::stop() { |
| 777 | if (!_isFinished) { | 777 | if (!_isFinished) { |
| 778 | if (QThread::currentThread() != thread()) { | ||
| 779 | QMetaObject::invokeMethod(this, "stop"); | ||
| 780 | return; | ||
| 781 | } | ||
| 778 | _isFinished = true; | 782 | _isFinished = true; |
| 779 | if (_wantSignals) { | 783 | if (_wantSignals) { |
| 780 | emit runningStateChanged(); | 784 | emit runningStateChanged(); |