Fix memory leak caused by fixture values never been garbage collected #3030
+54
−7
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.
The leak was caused by the (unused)
FixtureRequest._fixture_values
cache.
This was introduced because the
partial
object (created to callFixtureDef.finish() bound with the Request) is kept alive
through the entire session when a function-scoped fixture depends
on a session-scoped (or higher) fixture because of the nested
addfinalizer
calls.FixtureDef.finish() started receiving a request object in order to
obtain the proper hook proxy object (#2127), but this does not seem
useful at all in practice because
pytest_fixture_post_finalizer
will be called with the
request
object of the moment the fixture valuewas created, not the request object active when the fixture value
is being destroyed. We should probably deprecate/remove the request
parameter from
pytest_fixture_post_finalizer
.Fix #2981