summaryrefslogtreecommitdiffstats
path: root/core/object/script_language.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/object/script_language.cpp')
-rw-r--r--core/object/script_language.cpp36
1 files changed, 29 insertions, 7 deletions
diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp
index 5f53975bf6..086f8a666e 100644
--- a/core/object/script_language.cpp
+++ b/core/object/script_language.cpp
@@ -223,26 +223,48 @@ void ScriptServer::init_languages() {
}
}
+ HashSet<ScriptLanguage *> langs_to_init;
{
MutexLock lock(languages_mutex);
-
for (int i = 0; i < _language_count; i++) {
- _languages[i]->init();
+ if (_languages[i]) {
+ langs_to_init.insert(_languages[i]);
+ }
}
+ }
+ for (ScriptLanguage *E : langs_to_init) {
+ E->init();
+ }
+
+ {
+ MutexLock lock(languages_mutex);
languages_ready = true;
}
}
void ScriptServer::finish_languages() {
- MutexLock lock(languages_mutex);
+ HashSet<ScriptLanguage *> langs_to_finish;
- for (int i = 0; i < _language_count; i++) {
- _languages[i]->finish();
+ {
+ MutexLock lock(languages_mutex);
+ for (int i = 0; i < _language_count; i++) {
+ if (_languages[i]) {
+ langs_to_finish.insert(_languages[i]);
+ }
+ }
+ }
+
+ for (ScriptLanguage *E : langs_to_finish) {
+ E->finish();
}
- global_classes_clear();
- languages_ready = false;
+ {
+ MutexLock lock(languages_mutex);
+ languages_ready = false;
+ }
+
+ global_classes_clear();
}
bool ScriptServer::are_languages_initialized() {