Fixed segfault in ClassDerived.tp_dealloc #1330
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.
What caused the problem + fixes
All reflected .NET types stored
GCHandle
pointing to their implementations past the last byte ofPyTypeObject
. By addingIntPtr.Size
to the size ofPyTypeObject
for CLR metatype we ensure, that the necessary space is allocated without relying on Python never writing immediately aftertype
instances.In
ClassDerivedObject
tp_dealloc
tried to usetpHandle
which was previously NULLed intp_clear
. Fortunately,tpHandle
inClassDerivedObject
is merely a duplicate ofPyObject_TYPE(pyHandle)
, so could be read from there.Does this close any currently open issues?
#1327