Make reload_configuration() and cleanup() safer

This commit is contained in:
JeremyStar™ 2024-05-10 19:16:25 +02:00
parent fd4d7d2eb0
commit 09dee490e5
Signed by: JeremyStarTM
GPG key ID: E366BAEF67E4704D

View file

@ -208,7 +208,7 @@ Thank you for using the CORE Framework to develop your application or game!""".r
func reload_configuration(new_config: CoreConfiguration = CoreConfiguration.new()) -> void:
var initialized = config != null
if initialized: loggeri.verb("Reloading CORE's configuration")
if config != null: config.queue_free()
if is_instance_valid(config): config.free()
config = new_config.duplicate()
if is_devmode(): # Override configuration in development mode
config.logger_level = CoreTypes.LoggerLevel.DIAG
@ -291,20 +291,23 @@ func cleanup() -> void:
else:
loggeri.diag("Calling cleanup hook #" + str(hook))
await cleanup_hooks[hook].call()
await get_tree().process_frame
loggeri.verb("Unregistering custom modules")
for module in custom_modules_node.get_children(): await unregister_custom_module(module.name)
await get_tree().process_frame
loggeri.verb("Removing custom module support")
remove_child(custom_modules_node)
custom_modules_node.queue_free()
await get_tree().process_frame
loggeri.verb("Unloading built-in modules")
var modules_reverse: Array[String] = modules.duplicate()
modules_reverse.reverse()
for module in modules_reverse:
await get(module)._cleanup()
get(module).queue_free()
print("Freeing configuration")
config.queue_free()
await get_tree().process_frame
print("Freeing configuration")
config.free()
print("Freeing")
queue_free()