GodotNuts / GodotFirebase

Implementations of Firebase for Godot using GDScript
MIT License
530 stars 76 forks source link

Memory leak #338

Closed Firty closed 1 year ago

Firty commented 1 year ago

Hello, I have been using this wonderful plugin in some projects, but I noticed that when I add it I always get memory leak messages, or rather messages saying that some resources were not released in the right way. Using --verbose in an exported executable, I got this result.:

WARNING: ObjectDB instances leaked at exit (run with --verbose for details). at: cleanup (core/object.cpp:2070) Leaked instance: Timer:2380 - Node name: @@358 Leaked instance: GDScriptNativeClass:564 Leaked instance: ImageTexture:201 - Resource path: Leaked instance: VScrollBar:2378 - Node name: @@356 Leaked instance: HScrollBar:2377 - Node name: @@355 Leaked instance: ImageTexture:204 - Resource path: Leaked instance: ImageTexture:192 - Resource path: Leaked instance: BitmapFont:78 - Resource path: Leaked instance: Timer:2381 - Node name: @@359 Leaked instance: TextEdit:2376 - Node name: Leaked instance: ImageTexture:196 - Resource path: Leaked instance: ImageTexture:81 - Resource path: Leaked instance: PopupMenu:2382 - Node name: @@361 Leaked instance: ImageTexture:548 - Resource path: Leaked instance: StyleBoxTexture:89 - Resource path: Leaked instance: StyleBoxTexture:195 - Resource path: Leaked instance: StyleBoxTexture:199 - Resource path: Leaked instance: Timer:2379 - Node name: @@357 Leaked instance: ImageTexture:207 - Resource path: Leaked instance: GDScript:1233 - Resource path: res://addons/godot-firebase/storage/storage_reference.gd Leaked instance: ImageTexture:210 - Resource path: Leaked instance: ImageTexture:86 - Resource path: Leaked instance: Timer:2383 - Node name: @@360 Hint: Leaked instances typically happen when nodes are removed from the scene tree (with remove_child()) but not freed (with free() or queue_free()). ERROR: Resources still in use at exit (run with --verbose for details). at: clear (core/resource.cpp:417) Resource still in use: res://addons/godot-firebase/storage/storage_reference.gd (GDScript) Orphan StringName: MIME_TYPES Orphan StringName: _upload Orphan StringName: _on_task_finished Orphan StringName: data Orphan StringName: list_all Orphan StringName: _download Orphan StringName: get_len Orphan StringName: plus_file Orphan StringName: Reference Orphan StringName: put_data Orphan StringName: _to_string Orphan StringName: bucket Orphan StringName: parent Orphan StringName: ImageTexture Orphan StringName: _toggle_draw_caret Orphan StringName: new Orphan StringName: delete Orphan StringName: GDScriptNativeClass Orphan StringName: READ Orphan StringName: Content-Length Orphan StringName: ref Orphan StringName: _submenu_timeout Orphan StringName: valid Orphan StringName: get_string Orphan StringName: get_name Orphan StringName: list Orphan StringName: get Orphan StringName: id_pressed Orphan StringName: value_changed Orphan StringName: open Orphan StringName: VScrollBar Orphan StringName: HScrollBar Orphan StringName: timeout Orphan StringName: get_string_from_utf8 Orphan StringName: @@355 Orphan StringName: @@356 Orphan StringName: @@357 Orphan StringName: @@358 Orphan StringName: @@359 Orphan StringName: _delete Orphan StringName: @@360 Orphan StringName: @@361 Orphan StringName: append Orphan StringName: print Orphan StringName: get_buffer Orphan StringName: _pending_tasks Orphan StringName: scrolling Orphan StringName: root Orphan StringName: get_download_url Orphan StringName: close Orphan StringName: menu_option Orphan StringName: get_metadata Orphan StringName: _scroll_moved Orphan StringName: get_data Orphan StringName: Timer Orphan StringName: name Orphan StringName: PopupMenu Orphan StringName: update_metadata Orphan StringName: put_file Orphan StringName: _push_current_op Orphan StringName: Content-Type Orphan StringName: _v_scroll_input Orphan StringName: to_utf8 Orphan StringName: _init Orphan StringName: connect Orphan StringName: size Orphan StringName: StyleBoxTexture Orphan StringName: BitmapFont Orphan StringName: get_extension Orphan StringName: res://addons/godot-firebase/storage/storage_reference.gd Orphan StringName: child Orphan StringName: storage Orphan StringName: GDScript Orphan StringName: _list Orphan StringName: DEFAULT_MIME_TYPE Orphan StringName: TextEdit Orphan StringName: full_path Orphan StringName: _click_selection_held Orphan StringName: put_string StringName: 79 unclaimed string names at exit.

I can't guarantee that all these orphans belong to the plugin but a good number of them seem to have to do with the storage_reference.gd script. Of course this doesn't interfere with the use of the plugin in general but seeing that bunch of errors at the end affects my touch kkkkk

WolfgangSenff commented 1 year ago

This happens with almost any code you use when running through a script like this - it is a well-known timing bug in Godot itself. These are all cleaned up by the time it completes its run of the program itself. I'm going to go ahead and close this, as it is not something we can fix.