Fix refcount leak to re.Pattern when using Meta(pattern=...)#899
Merged
ofek merged 5 commits intojcrist:mainfrom Nov 23, 2025
Merged
Fix refcount leak to re.Pattern when using Meta(pattern=...)#899ofek merged 5 commits intojcrist:mainfrom
re.Pattern when using Meta(pattern=...)#899ofek merged 5 commits intojcrist:mainfrom
Conversation
cc60a08 to
2f8c030
Compare
CharString
approved these changes
Nov 10, 2025
f3c3acc to
4ed46d4
Compare
3513781 to
bc5b1e0
Compare
Collaborator
|
Just a heads up that in my last commit to your branch I fixed another leak I noticed that was already present! |
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.
When using
msgspec.Meta(pattern="something"), msgspec creates a leaky reference to anre.Pattern, by increasing its reference count too many times.This is caused by the fact that it creates the
Patternobject with a call toPyObject_CallOneArg, which returns a new strong reference. Msgspec then add this to theMetaobject, during which the Pattern's refcount is increased again. Due to this, its refcount can never fall to 0, keeping it alive indefinitely.We can show this with a simple script:
this should print
False, since there should be no suchre.Patternobjects arounds anymore, but this is not the case.I have fixed this by foregoing the
SET_FIELDmacro, and instead simply assigning the field directly, without callingPy_XINCREFon its value.