Skip to content

Commit 6f5d230

Browse files
committed
Fix leaks from downcall returns
1 parent 3e4753e commit 6f5d230

File tree

5 files changed

+30
-29
lines changed

5 files changed

+30
-29
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PCallCapiFunction;
128128
import com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionNodes;
129129
import com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol;
130-
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonNode;
130+
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonTransferNode;
131131
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNode;
132132
import com.oracle.graal.python.builtins.objects.cext.common.CArrayWrappers.CByteArrayWrapper;
133133
import com.oracle.graal.python.builtins.objects.code.CodeNodes;
@@ -360,7 +360,7 @@ static PBytes doManaged(@SuppressWarnings("unused") Node inliningTarget, Object
360360
static Object doNative(@SuppressWarnings("unused") Node inliningTarget, Object cls, byte[] bytes,
361361
@SuppressWarnings("unused") @Shared @Cached TypeNodes.NeedsNativeAllocationNode needsNativeAllocationNode,
362362
@Cached(inline = false) PythonToNativeNode toNative,
363-
@Cached(inline = false) NativeToPythonNode toPython,
363+
@Cached(inline = false) NativeToPythonTransferNode toPython,
364364
@Cached(inline = false) PCallCapiFunction call) {
365365
CByteArrayWrapper wrapper = new CByteArrayWrapper(bytes);
366366
try {
@@ -415,7 +415,7 @@ static PComplex doManaged(@SuppressWarnings("unused") Node inliningTarget, Objec
415415
static Object doNative(Node inliningTarget, Object cls, double real, double imaginary,
416416
@Cached(inline = false) PCallCapiFunction callCapiFunction,
417417
@Cached(inline = false) PythonToNativeNode toNativeNode,
418-
@Cached(inline = false) NativeToPythonNode toPythonNode,
418+
@Cached(inline = false) NativeToPythonTransferNode toPythonNode,
419419
@Cached(inline = false) ExternalFunctionNodes.DefaultCheckFunctionResultNode checkFunctionResultNode) {
420420
NativeCAPISymbol symbol = NativeCAPISymbol.FUN_COMPLEX_SUBTYPE_FROM_DOUBLES;
421421
Object nativeResult = callCapiFunction.call(symbol, toNativeNode.execute(cls), real, imaginary);
@@ -1962,7 +1962,7 @@ protected abstract static class CallNativeGenericNewNode extends Node {
19621962
@Specialization
19631963
static Object call(Object cls,
19641964
@Cached(inline = false) PythonToNativeNode toNativeNode,
1965-
@Cached(inline = false) NativeToPythonNode toPythonNode,
1965+
@Cached(inline = false) NativeToPythonTransferNode toPythonNode,
19661966
@Cached(inline = false) PCallCapiFunction callCapiFunction) {
19671967
return toPythonNode.execute(callCapiFunction.call(FUN_PY_OBJECT_NEW, toNativeNode.execute(cls)));
19681968
}
@@ -2996,7 +2996,7 @@ static Object doNativeSubtype(Object cls, Object[] args, @SuppressWarnings("unus
29962996
@Shared @Cached PythonObjectFactory factory,
29972997
@Cached PCallCapiFunction callCapiFunction,
29982998
@Cached PythonToNativeNode toNativeNode,
2999-
@Cached NativeToPythonNode toPythonNode,
2999+
@Cached NativeToPythonTransferNode toPythonNode,
30003000
@Cached ExternalFunctionNodes.DefaultCheckFunctionResultNode checkFunctionResultNode) {
30013001
Object argsTuple = args.length > 0 ? factory.createTuple(args) : factory.createEmptyTuple();
30023002
Object nativeResult = callCapiFunction.call(NativeCAPISymbol.FUN_EXCEPTION_SUBTYPE_NEW, toNativeNode.execute(cls), toNativeNode.execute(argsTuple));

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions;
9595
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.HandlePointerConverter;
9696
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonNode;
97-
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonStealingNode;
97+
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonTransferNode;
9898
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNode;
9999
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.ResolveHandleNode;
100100
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.NativeToPythonNodeGen;
@@ -233,7 +233,7 @@ protected static NativeCAPISymbol getFunction(String typenamePrefix) {
233233
Object callNativeConstructor(Object object, Object arg,
234234
@Bind("this") Node inliningTarget,
235235
@Cached PythonToNativeNode toSulongNode,
236-
@Cached NativeToPythonNode toJavaNode,
236+
@Cached NativeToPythonTransferNode toJavaNode,
237237
@CachedLibrary(limit = "1") InteropLibrary interopLibrary) {
238238
assert TypeNodes.NeedsNativeAllocationNode.executeUncached(object);
239239
try {
@@ -1624,7 +1624,7 @@ static Object doGeneric(CApiContext capiContext, ModuleSpec moduleSpec, Object m
16241624
@Cached WriteAttributeToObjectNode writeAttrNode,
16251625
@Cached WriteAttributeToPythonObjectNode writeAttrToMethodNode,
16261626
@Cached CreateMethodNode addLegacyMethodNode,
1627-
@Cached NativeToPythonStealingNode toJavaNode,
1627+
@Cached NativeToPythonTransferNode toJavaNode,
16281628
@Cached CStructAccess.ReadPointerNode readPointerNode,
16291629
@Cached CStructAccess.ReadI32Node readI32Node,
16301630
@Cached PRaiseNode.Lazy raiseNode) {
@@ -1909,7 +1909,7 @@ public abstract static class CreateMemoryViewFromNativeNode extends PNodeWithCon
19091909
@Specialization
19101910
static PMemoryView fromNative(PythonNativeObject buf, int flags,
19111911
@Cached(inline = false) PythonToNativeNode toSulongNode,
1912-
@Cached(inline = false) NativeToPythonNode asPythonObjectNode,
1912+
@Cached(inline = false) NativeToPythonTransferNode asPythonObjectNode,
19131913
@Cached(inline = false) PCallCapiFunction callCapiFunction,
19141914
@Cached(inline = false) DefaultCheckFunctionResultNode checkFunctionResultNode) {
19151915
Object result = callCapiFunction.call(FUN_PY_TRUFFLE_MEMORYVIEW_FROM_OBJECT, toSulongNode.execute(buf), flags);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/NativeCAPISymbol.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PY_SSIZE_T_PTR;
4949
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Pointer;
5050
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObject;
51+
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectTransfer;
5152
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyTypeObject;
5253
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_ssize_t;
5354
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.SIZE_T;
@@ -127,9 +128,9 @@ public enum NativeCAPISymbol implements NativeCExtSymbol {
127128
FUN_PY_TRUFFLE_INITIALIZE_STORAGE_ITEM("PyTruffle_InitializeStorageItem", ArgDescriptor.Void, Pointer, Int, PyObject),
128129
FUN_PY_OBJECT_GET_DICT_PTR("_PyObject_GetDictPtr", Pointer, PyObject),
129130
FUN_PY_OBJECT_GENERIC_SET_DICT("PyObject_GenericSetDict", Int, PyObject, PyObject, Pointer),
130-
FUN_PY_OBJECT_NEW("PyTruffle_Object_New", PyObject, PyTypeObject),
131+
FUN_PY_OBJECT_NEW("PyTruffle_Object_New", PyObjectTransfer, PyTypeObject),
131132
FUN_PY_TYPE_READY("PyType_Ready", Int, PyTypeObject),
132-
FUN_PY_TYPE_GENERIC_ALLOC("PyType_GenericAlloc", PyObject, PyTypeObject, Py_ssize_t),
133+
FUN_PY_TYPE_GENERIC_ALLOC("PyType_GenericAlloc", PyObjectTransfer, PyTypeObject, Py_ssize_t),
133134
FUN_PY_OBJECT_GC_DEL("PyObject_GC_Del", Void, Pointer),
134135
FUN_GET_BUFFER_R("get_buffer_r", Int, PyObject, Pointer),
135136
FUN_GET_BUFFER_RW("get_buffer_rw", Int, PyObject, Pointer),
@@ -143,22 +144,22 @@ public enum NativeCAPISymbol implements NativeCExtSymbol {
143144
FUN_BULK_DEALLOC("PyTruffle_bulk_DEALLOC", Py_ssize_t, Pointer, INT64_T),
144145
FUN_SHUTDOWN_BULK_DEALLOC("PyTruffle_shutdown_bulk_DEALLOC", Py_ssize_t, Pointer, INT64_T),
145146
FUN_TRUFFLE_ADD_SUBOFFSET("truffle_add_suboffset", Pointer, Pointer, Py_ssize_t, Py_ssize_t),
146-
FUN_PY_TRUFFLE_MEMORYVIEW_FROM_OBJECT("PyTruffle_MemoryViewFromObject", PyObject, PyObject, Int),
147+
FUN_PY_TRUFFLE_MEMORYVIEW_FROM_OBJECT("PyTruffle_MemoryViewFromObject", PyObjectTransfer, PyObject, Int),
147148
FUN_PY_TRUFFLE_RELEASE_BUFFER("PyTruffle_ReleaseBuffer", ArgDescriptor.Void, Pointer),
148149
FUN_PY_SEQUENCE_CHECK("PySequence_Check", Int, PyObject),
149150
FUN_PY_SEQUENCE_SIZE("PySequence_Size", Py_ssize_t, PyObject),
150-
FUN_PY_SEQUENCE_GET_ITEM("PySequence_GetItem", PyObject, PyObject, Py_ssize_t),
151+
FUN_PY_SEQUENCE_GET_ITEM("PySequence_GetItem", PyObjectTransfer, PyObject, Py_ssize_t),
151152
FUN_PY_SEQUENCE_SET_ITEM("PySequence_SetItem", Int, PyObject, Py_ssize_t, PyObject),
152153
FUN_PY_SEQUENCE_DEL_ITEM("PySequence_DelItem", Int, PyObject, Py_ssize_t),
153-
FUN_TUPLE_SUBTYPE_NEW("tuple_subtype_new", PyObject, PyTypeObject, PyObject),
154-
FUN_BYTES_SUBTYPE_NEW("bytes_subtype_new", PyObject, PyTypeObject, Pointer, Py_ssize_t),
155-
FUN_FLOAT_SUBTYPE_NEW("float_subtype_new", PyObject, PyTypeObject, ArgDescriptor.Double),
156-
FUN_COMPLEX_SUBTYPE_FROM_DOUBLES("complex_subtype_from_doubles", PyObject, PyTypeObject, ArgDescriptor.Double, ArgDescriptor.Double),
157-
FUN_EXCEPTION_SUBTYPE_NEW("exception_subtype_new", PyObject, PyTypeObject, PyObject),
154+
FUN_TUPLE_SUBTYPE_NEW("tuple_subtype_new", PyObjectTransfer, PyTypeObject, PyObject),
155+
FUN_BYTES_SUBTYPE_NEW("bytes_subtype_new", PyObjectTransfer, PyTypeObject, Pointer, Py_ssize_t),
156+
FUN_FLOAT_SUBTYPE_NEW("float_subtype_new", PyObjectTransfer, PyTypeObject, ArgDescriptor.Double),
157+
FUN_COMPLEX_SUBTYPE_FROM_DOUBLES("complex_subtype_from_doubles", PyObjectTransfer, PyTypeObject, ArgDescriptor.Double, ArgDescriptor.Double),
158+
FUN_EXCEPTION_SUBTYPE_NEW("exception_subtype_new", PyObjectTransfer, PyTypeObject, PyObject),
158159
FUN_SUBCLASS_CHECK("truffle_subclass_check", Int, PyObject),
159160
FUN_BASETYPE_CHECK("truffle_BASETYPE_check", Int, PyObject),
160161
FUN_MEMCPY_BYTES("truffle_memcpy_bytes", ArgDescriptor.Void, Pointer, SIZE_T, Pointer, SIZE_T, SIZE_T),
161-
FUN_UNICODE_SUBTYPE_NEW("unicode_subtype_new", PyObject, PyTypeObject, PyObject),
162+
FUN_UNICODE_SUBTYPE_NEW("unicode_subtype_new", PyObjectTransfer, PyTypeObject, PyObject),
162163
FUN_CHECK_BASESIZE_FOR_GETSTATE("tuffle_check_basesize_for_getstate", Int, PyTypeObject, Int),
163164
FUN_MMAP_INIT_BUFFERPROTOCOL("mmap_init_bufferprotocol", ArgDescriptor.Void, PyTypeObject),
164165
FUN_TRUFFLE_CHECK_TYPE_READY("truffle_check_type_ready", ArgDescriptor.Void, PyTypeObject),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/transitions/ArgDescriptor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
import com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionNodesFactory.InitCheckFunctionResultNodeGen;
5454
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.CharPtrToPythonNode;
5555
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonNode;
56-
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonStealingNode;
56+
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonTransferNode;
5757
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNewRefNode;
5858
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNode;
5959
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.ToPythonWrapperNode;
@@ -73,8 +73,8 @@ enum ArgBehavior {
7373
NativeToPythonNode::create,
7474
NativeToPythonNode.getUncached(),
7575
PythonToNativeNewRefNode::create,
76-
NativeToPythonStealingNode::create,
77-
NativeToPythonStealingNode.getUncached(),
76+
NativeToPythonTransferNode::create,
77+
NativeToPythonTransferNode.getUncached(),
7878
null),
7979
PyObjectBorrowed("POINTER", "J", "jlong", "long", ToNativeBorrowedNode::new, NativeToPythonNode::create, NativeToPythonNode.getUncached(), null, null, null, null),
8080
PyObjectAsTruffleString("POINTER", "J", "jlong", "long", null, ToPythonStringNode::create, ToPythonStringNode.getUncached(), null, null, null, null),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/transitions/CApiTransitions.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.FirstToNativeNodeGen;
7070
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.NativePtrToPythonNodeGen;
7171
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.NativeToPythonNodeGen;
72-
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.NativeToPythonStealingNodeGen;
72+
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.NativeToPythonTransferNodeGen;
7373
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.PythonToNativeNewRefNodeGen;
7474
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitionsFactory.PythonToNativeNodeGen;
7575
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.CoerceNativePointerToLongNode;
@@ -1328,7 +1328,7 @@ public static NativeToPythonNode getUncached() {
13281328

13291329
@GenerateUncached
13301330
@GenerateInline(false)
1331-
public abstract static class NativeToPythonStealingNode extends NativeToPythonNode {
1331+
public abstract static class NativeToPythonTransferNode extends NativeToPythonNode {
13321332

13331333
@Specialization
13341334
static Object dummy(@SuppressWarnings("unused") Void dummy) {
@@ -1338,7 +1338,7 @@ static Object dummy(@SuppressWarnings("unused") Void dummy) {
13381338

13391339
@TruffleBoundary
13401340
public static Object executeUncached(Object obj) {
1341-
return NativeToPythonStealingNodeGen.getUncached().execute(obj);
1341+
return NativeToPythonTransferNodeGen.getUncached().execute(obj);
13421342
}
13431343

13441344
@Override
@@ -1347,12 +1347,12 @@ protected final boolean needsTransfer() {
13471347
}
13481348

13491349
@NeverDefault
1350-
public static NativeToPythonStealingNode create() {
1351-
return NativeToPythonStealingNodeGen.create();
1350+
public static NativeToPythonTransferNode create() {
1351+
return NativeToPythonTransferNodeGen.create();
13521352
}
13531353

1354-
public static NativeToPythonStealingNode getUncached() {
1355-
return NativeToPythonStealingNodeGen.getUncached();
1354+
public static NativeToPythonTransferNode getUncached() {
1355+
return NativeToPythonTransferNodeGen.getUncached();
13561356
}
13571357
}
13581358

0 commit comments

Comments
 (0)