Skip to content

Fix container and string leaks#490

Merged
Zylann merged 2 commits intogodotengine:masterfrom
Zylann:container_leaks
Jan 31, 2021
Merged

Fix container and string leaks#490
Zylann merged 2 commits intogodotengine:masterfrom
Zylann:container_leaks

Conversation

@Zylann
Copy link
Collaborator

@Zylann Zylann commented Jan 7, 2021

This continues what was found in #355 and #356

Some functions return a new instance of Array, Dictionary, String or pool arrays, but instead we made a copy of them, without taking ownership of the original created by the function. Now we use a specific constructor taking ownership on the godot_* struct.

Leaks causing error logs on exit still occurred in Dictionary::values(), Array::duplicate() and other similar functions. But also, some leaks were invisible, such as strings or primitive data, with functions like Dictionary::to_json. I was able to confirm that by calling them in an infinite loop.

I havent extensively tested this PR, only tested a few, and then applied the pattern to all similar places I thought were relevant.

Might fix #470
Also #338 (though it might have been fixed by one of the earlier PRs)
Some leaks reported in #223 might have been caused indirectly by the same issue, otherwise it has no clear reproduction.
Tested on #144 on my way, works fine too.

Some functions return a new instance of such containers,
but instead we made a copy of them, without taking ownership of the
original created by the function.
Now we use a specific constructor taking ownership on the godot_* struct.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug This has been identified as a bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dictionary::values(), Dictionary::keys() and Array::duplicate() create broken Arrays

2 participants