1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-07 12:30:27 +00:00

Let languages init & finish run without locks held

This commit is contained in:
Pedro J. Estébanez
2023-11-13 16:06:48 +01:00
parent 59457685c1
commit f05f8c399e

View File

@@ -223,28 +223,50 @@ void ScriptServer::init_languages() {
} }
} }
HashSet<ScriptLanguage *> langs_to_init;
{ {
MutexLock lock(languages_mutex); MutexLock lock(languages_mutex);
for (int i = 0; i < _language_count; i++) { 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; languages_ready = true;
} }
} }
void ScriptServer::finish_languages() { void ScriptServer::finish_languages() {
HashSet<ScriptLanguage *> langs_to_finish;
{
MutexLock lock(languages_mutex); MutexLock lock(languages_mutex);
for (int i = 0; i < _language_count; i++) { for (int i = 0; i < _language_count; i++) {
_languages[i]->finish(); if (_languages[i]) {
langs_to_finish.insert(_languages[i]);
}
}
} }
global_classes_clear();
for (ScriptLanguage *E : langs_to_finish) {
E->finish();
}
{
MutexLock lock(languages_mutex);
languages_ready = false; languages_ready = false;
} }
global_classes_clear();
}
bool ScriptServer::are_languages_initialized() { bool ScriptServer::are_languages_initialized() {
MutexLock lock(languages_mutex); MutexLock lock(languages_mutex);
return languages_ready; return languages_ready;