History

Merge pull request #6592 from huffman/script-engine-fixes

Fix concurrency issues for bools in ScriptEngine

James B. Pollack committed 10 years ago

Commit d21e4ff2 parents 1542b6d ad086514 files · +94 −48Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 4 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+6−2
@@ -183,7 +183,7 @@ void ScriptEngine::runInThread() { · 182 unmodified lines
183 183
184QSet<ScriptEngine*> ScriptEngine::_allKnownScriptEngines;184QSet<ScriptEngine*> ScriptEngine::_allKnownScriptEngines;
185QMutex ScriptEngine::_allScriptsMutex;185QMutex ScriptEngine::_allScriptsMutex;
186bool ScriptEngine::_stoppingAllScripts = false;186std::atomic<bool> ScriptEngine::_stoppingAllScripts { false };
187 187
188void ScriptEngine::stopAllScripts(QObject* application) {188void 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
776void ScriptEngine::stop() {776void 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();