Fix object release in macOS #453
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously, we would release the image data provider, but not the image. We actually need to release the image, and not the data provider. This is based on the CoreFoundation "Create/Copy/Get" ownership rules: we own things that we allocate with functions with Create or Copy in their name, but not things that have Get in their name.
I suspect that the CGImage held a reference to its data provider, which stored the pixel data. When we freed the data provider, we released the pixel data, but not the CGImage structure.
Now, we're releasing the CGImage, and it releases the data provider.
Empirical testing while taking 10000 successive screenshots showed that, once steady state was reached, the previous version was leaking an average of about 467 bytes per screenshot on average. The new version still leaks about 148 bytes per screenshot, although that may not be related to macOS.
Also fixed a few function types, but those were harmless.
Changes proposed in this PR
It is very important to keep up to date tests and documentation.
Is your code right?
./check.shpassed