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
183183
184184 QSet<ScriptEngine*> ScriptEngine::_allKnownScriptEngines;
185185 QMutex ScriptEngine::_allScriptsMutex;
186−bool ScriptEngine::_stoppingAllScripts = false;
186+std::atomic<bool> ScriptEngine::_stoppingAllScripts { false };
187187
188188 void ScriptEngine::stopAllScripts(QObject* application) {
189189 _allScriptsMutex.lock();
@@ -752,7 +752,7 @@ void ScriptEngine::run() { · 562 unmodified lines
752752 }
753753
754754 if (_wantSignals) {
755− emit finished(_fileNameString);
755+ emit finished(_fileNameString, this);
756756 }
757757
758758 _isRunning = false;
@@ -775,6 +775,10 @@ void ScriptEngine::stopAllTimers() { · 16 unmodified lines
775775
776776 void ScriptEngine::stop() {
777777 if (!_isFinished) {
778+ if (QThread::currentThread() != thread()) {
779+ QMetaObject::invokeMethod(this, "stop");
780+ return;
781+ }
778782 _isFinished = true;
779783 if (_wantSignals) {
780784 emit runningStateChanged();