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.
Issue
Segfault due to Python 3.11 changes to object layout and memory allocation methods.
Background
Python 3.11 introduced changes to optimize CPython. One of the significant changes, as mentioned in this PR, modifies the object layout to place pointers to dict and values immediately before the GC header. This change potentially affected the memory layout of custom python objects.
Before:
After:
Moreover, this commit removed
_PyObject_GC_Calloc
and_PyObject_GC_Malloc
, affecting the memory allocation for objects that participate in garbage collection.Solution
The new memory allocation relies on
PyObject_New
instead ofPyObject_GC_New
.Updates in this PR
The earlier PR #293 only updates the memory allocation for
convert_C_port_to_py
. However, updates are also necessary forconvert_C_mode_to_py
andconvert_C_tag_to_py
.Test
./gradlew targetTest -Ptarget=Python
is expected to pass now with the modifications introduced in this PR.