Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix container and string leaks #490

Merged
merged 2 commits into from
Jan 31, 2021
Merged

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