mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 15:21:56 -05:00
Merge pull request #109240 from bruvzg/scr_log_unreg
Automatically unregister loggers when script language is deinitialized.
This commit is contained in:
@@ -718,6 +718,27 @@ void OS::remove_logger(const Ref<Logger> &p_logger) {
|
|||||||
logger_bind->loggers.erase(p_logger);
|
logger_bind->loggers.erase(p_logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OS::remove_script_loggers(const ScriptLanguage *p_script) {
|
||||||
|
if (logger_bind) {
|
||||||
|
LocalVector<Ref<CoreBind::Logger>> to_remove;
|
||||||
|
for (const Ref<CoreBind::Logger> &logger : logger_bind->loggers) {
|
||||||
|
if (logger.is_null()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ScriptInstance *si = logger->get_script_instance();
|
||||||
|
if (!si) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (si->get_language() == p_script) {
|
||||||
|
to_remove.push_back(logger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const Ref<CoreBind::Logger> &logger : to_remove) {
|
||||||
|
logger_bind->loggers.erase(logger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OS::_bind_methods() {
|
void OS::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_entropy", "size"), &OS::get_entropy);
|
ClassDB::bind_method(D_METHOD("get_entropy", "size"), &OS::get_entropy);
|
||||||
ClassDB::bind_method(D_METHOD("get_system_ca_certificates"), &OS::get_system_ca_certificates);
|
ClassDB::bind_method(D_METHOD("get_system_ca_certificates"), &OS::get_system_ca_certificates);
|
||||||
|
|||||||
@@ -311,6 +311,7 @@ public:
|
|||||||
|
|
||||||
void add_logger(const Ref<Logger> &p_logger);
|
void add_logger(const Ref<Logger> &p_logger);
|
||||||
void remove_logger(const Ref<Logger> &p_logger);
|
void remove_logger(const Ref<Logger> &p_logger);
|
||||||
|
void remove_script_loggers(const ScriptLanguage *p_script);
|
||||||
|
|
||||||
static OS *get_singleton() { return singleton; }
|
static OS *get_singleton() { return singleton; }
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "script_language.h"
|
#include "script_language.h"
|
||||||
|
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
|
#include "core/core_bind.h"
|
||||||
#include "core/debugger/engine_debugger.h"
|
#include "core/debugger/engine_debugger.h"
|
||||||
#include "core/debugger/script_debugger.h"
|
#include "core/debugger/script_debugger.h"
|
||||||
#include "core/io/resource_loader.h"
|
#include "core/io/resource_loader.h"
|
||||||
@@ -330,6 +331,9 @@ void ScriptServer::finish_languages() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (ScriptLanguage *E : langs_to_finish) {
|
for (ScriptLanguage *E : langs_to_finish) {
|
||||||
|
if (CoreBind::OS::get_singleton()) {
|
||||||
|
CoreBind::OS::get_singleton()->remove_script_loggers(E); // Unregister loggers using this script language.
|
||||||
|
}
|
||||||
E->finish();
|
E->finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user