BUG: Fix memory leak of buffer-info cache due to relaxed strides#17647
Merged
charris merged 3 commits intonumpy:maintenance/1.19.xfrom Oct 27, 2020
Merged
BUG: Fix memory leak of buffer-info cache due to relaxed strides#17647charris merged 3 commits intonumpy:maintenance/1.19.xfrom
charris merged 3 commits intonumpy:maintenance/1.19.xfrom
Conversation
When relaxed strides is active (and has an effect), we recalculate the strides to export "clean" strides in the buffer interface. (Python and probably some other exporters expect this, i.e. NumPy has fully switched to and embraced relaxed strides, but the buffer interface at large probably not.) The place where "fixing" the strides occured however meant that when the strides are fixed, the old, cached buffer-info was not reused when it should have been reused. This moves the "fixing" logic so that reuse will occur. It leaves one issue open in that an array shaped e.g. `(1, 10)` is both C- and F-contiguous. Thus, if it is exported as C-contiguous and then as F-contiguous, and then *again* as C-contiguous, this will work, but the last export will compare to the export as an F-contig buffer and thus still leak memory. Address numpygh-16934 (but does leave a small hole)
Exporting these multiple times alternating would previously cause a new buffer-info to be created each time.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Backport of #16936.
When relaxed strides is active (and has an effect), we recalculate
the strides to export "clean" strides in the buffer interface.
(Python and probably some other exporters expect this, i.e. NumPy
has fully switched to and embraced relaxed strides, but the buffer
interface at large probably not.)
The place where "fixing" the strides occured however meant that
when the strides are fixed, the old, cached buffer-info was not
reused when it should have been reused.
This moves the "fixing" logic so that reuse will occur. It leaves
one issue open in that an array shaped e.g. (1, 10) is both
C- and F-contiguous. Thus, if it is exported as C-contiguous and
then as F-contiguous, and then again as C-contiguous, this will
work, but the last export will compare to the export as an F-contig
buffer and thus still leak memory.
Address gh-16934 (but does leave a small hole)