Skip to content

Commit 9fd9841

Browse files
committed
Automatically unregister loggers when script language is deinitialized.
1 parent dda2614 commit 9fd9841

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

core/core_bind.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,27 @@ void OS::remove_logger(const Ref<Logger> &p_logger) {
718718
logger_bind->loggers.erase(p_logger);
719719
}
720720

721+
void OS::remove_script_loggers(const ScriptLanguage *p_script) {
722+
if (logger_bind) {
723+
LocalVector<Ref<CoreBind::Logger>> to_remove;
724+
for (const Ref<CoreBind::Logger> &logger : logger_bind->loggers) {
725+
if (logger.is_null()) {
726+
continue;
727+
}
728+
ScriptInstance *si = logger->get_script_instance();
729+
if (!si) {
730+
continue;
731+
}
732+
if (si->get_language() == p_script) {
733+
to_remove.push_back(logger);
734+
}
735+
}
736+
for (const Ref<CoreBind::Logger> &logger : to_remove) {
737+
logger_bind->loggers.erase(logger);
738+
}
739+
}
740+
}
741+
721742
void OS::_bind_methods() {
722743
ClassDB::bind_method(D_METHOD("get_entropy", "size"), &OS::get_entropy);
723744
ClassDB::bind_method(D_METHOD("get_system_ca_certificates"), &OS::get_system_ca_certificates);

core/core_bind.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ class OS : public Object {
311311

312312
void add_logger(const Ref<Logger> &p_logger);
313313
void remove_logger(const Ref<Logger> &p_logger);
314+
void remove_script_loggers(const ScriptLanguage *p_script);
314315

315316
static OS *get_singleton() { return singleton; }
316317

core/object/script_language.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "script_language.h"
3232

3333
#include "core/config/project_settings.h"
34+
#include "core/core_bind.h"
3435
#include "core/debugger/engine_debugger.h"
3536
#include "core/debugger/script_debugger.h"
3637
#include "core/io/resource_loader.h"
@@ -330,6 +331,9 @@ void ScriptServer::finish_languages() {
330331
}
331332

332333
for (ScriptLanguage *E : langs_to_finish) {
334+
if (CoreBind::OS::get_singleton()) {
335+
CoreBind::OS::get_singleton()->remove_script_loggers(E); // Unregister loggers using this script language.
336+
}
333337
E->finish();
334338
}
335339

0 commit comments

Comments
 (0)