History

Fix hang on new script on shutdown

Zach Pomerantz committed 10 years ago

Commit a0d80b91 parent 22081a81 file · +5 −8Browse files

Showing the changes to libraries/script-engine/src/ScriptEngines.cpp (1 of 1 file). Show all

Unified · Split

libraries/script-engine/src/ScriptEngines.cpp+5−8
@@ -118,9 +118,9 @@ void ScriptEngines::registerScriptInitializer(ScriptInitializer initializer) { · 117 unmodified lines
118118 }
119119
120120 void ScriptEngines::addScriptEngine(ScriptEngine* engine) {
121− _allScriptsMutex.lock();
122− _allKnownScriptEngines.insert(engine);
123− _allScriptsMutex.unlock();
121+ if (!_stoppingAllScripts) {
122+ _allKnownScriptEngines.insert(engine);
123+ }
124124 }
125125
126126 void ScriptEngines::removeScriptEngine(ScriptEngine* engine) {
@@ -128,16 +128,15 @@ void ScriptEngines::removeScriptEngine(ScriptEngine* engine) { · 1 unmodified line
128128 // from the list of running scripts. We don't do this if we're in the process of stopping all scripts
129129 // because that method removes scripts from its list as it iterates them
130130 if (!_stoppingAllScripts) {
131− _allScriptsMutex.lock();
131+ QMutexLocker locker(&_allScriptsMutex);
132132 _allKnownScriptEngines.remove(engine);
133− _allScriptsMutex.unlock();
134133 }
135134 }
136135
137136 void ScriptEngines::shutdownScripting() {
138− _allScriptsMutex.lock();
139137 _stoppingAllScripts = true;
140138 ScriptEngine::_stoppingAllScripts = true;
139+ QMutexLocker locker(&_allScriptsMutex);
141140 qCDebug(scriptengine) << "Stopping all scripts.... currently known scripts:" << _allKnownScriptEngines.size();
142141
143142 QMutableSetIterator<ScriptEngine*> i(_allKnownScriptEngines);
@@ -173,8 +172,6 @@ void ScriptEngines::shutdownScripting() { · 29 unmodified lines
173172 i.remove();
174173 }
175174 }
176− _stoppingAllScripts = false;
177− _allScriptsMutex.unlock();
178175 qCDebug(scriptengine) << "DONE Stopping all scripts....";
179176 }
180177