Update PyObject_Del() documentation (#122597)

Replace PyMem_Del() with PyMem_Free().
This commit is contained in:
Victor Stinner 2024-08-02 12:13:33 +02:00 committed by GitHub
parent 03b88522f5
commit addbb73927
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 13 additions and 18 deletions

View File

@ -54,12 +54,7 @@ Allocating Objects on the Heap
.. c:function:: void PyObject_Del(void *op) .. c:function:: void PyObject_Del(void *op)
Releases memory allocated to an object using :c:macro:`PyObject_New` or Same as :c:func:`PyObject_Free`.
:c:macro:`PyObject_NewVar`. This is normally called from the
:c:member:`~PyTypeObject.tp_dealloc` handler specified in the object's type. The fields of
the object should not be accessed after this call as the memory is no
longer a valid Python object.
.. c:var:: PyObject _Py_NoneStruct .. c:var:: PyObject _Py_NoneStruct

View File

@ -734,7 +734,7 @@ The same code using the type-oriented function set::
return PyErr_NoMemory(); return PyErr_NoMemory();
/* ...Do some I/O operation involving buf... */ /* ...Do some I/O operation involving buf... */
res = PyBytes_FromString(buf); res = PyBytes_FromString(buf);
PyMem_Del(buf); /* allocated with PyMem_New */ PyMem_Free(buf); /* allocated with PyMem_New */
return res; return res;
Note that in the two examples above, the buffer is always manipulated via Note that in the two examples above, the buffer is always manipulated via
@ -750,11 +750,11 @@ allocators operating on different heaps. ::
... ...
PyMem_Del(buf3); /* Wrong -- should be PyMem_Free() */ PyMem_Del(buf3); /* Wrong -- should be PyMem_Free() */
free(buf2); /* Right -- allocated via malloc() */ free(buf2); /* Right -- allocated via malloc() */
free(buf1); /* Fatal -- should be PyMem_Del() */ free(buf1); /* Fatal -- should be PyMem_Free() */
In addition to the functions aimed at handling raw memory blocks from the Python In addition to the functions aimed at handling raw memory blocks from the Python
heap, objects in Python are allocated and released with :c:macro:`PyObject_New`, heap, objects in Python are allocated and released with :c:macro:`PyObject_New`,
:c:macro:`PyObject_NewVar` and :c:func:`PyObject_Del`. :c:macro:`PyObject_NewVar` and :c:func:`PyObject_Free`.
These will be explained in the next chapter on defining and implementing new These will be explained in the next chapter on defining and implementing new
object types in C. object types in C.

View File

@ -530,7 +530,7 @@ state_fini(SRE_STATE* state)
PyBuffer_Release(&state->buffer); PyBuffer_Release(&state->buffer);
Py_XDECREF(state->string); Py_XDECREF(state->string);
data_stack_dealloc(state); data_stack_dealloc(state);
/* See above PyMem_Del for why we explicitly cast here. */ /* See above PyMem_Free() for why we explicitly cast here. */
PyMem_Free((void*) state->mark); PyMem_Free((void*) state->mark);
state->mark = NULL; state->mark = NULL;
} }

View File

@ -269,16 +269,16 @@ test_type_from_ephemeral_spec(PyObject *self, PyObject *Py_UNUSED(ignored))
// (Explicitly overwrite memory before freeing, // (Explicitly overwrite memory before freeing,
// so bugs show themselves even without the debug allocator's help.) // so bugs show themselves even without the debug allocator's help.)
memset(spec, 0xdd, sizeof(PyType_Spec)); memset(spec, 0xdd, sizeof(PyType_Spec));
PyMem_Del(spec); PyMem_Free(spec);
spec = NULL; spec = NULL;
memset(name, 0xdd, sizeof(NAME)); memset(name, 0xdd, sizeof(NAME));
PyMem_Del(name); PyMem_Free(name);
name = NULL; name = NULL;
memset(doc, 0xdd, sizeof(DOC)); memset(doc, 0xdd, sizeof(DOC));
PyMem_Del(doc); PyMem_Free(doc);
doc = NULL; doc = NULL;
memset(slots, 0xdd, 3 * sizeof(PyType_Slot)); memset(slots, 0xdd, 3 * sizeof(PyType_Slot));
PyMem_Del(slots); PyMem_Free(slots);
slots = NULL; slots = NULL;
/* check that everything works */ /* check that everything works */
@ -304,10 +304,10 @@ test_type_from_ephemeral_spec(PyObject *self, PyObject *Py_UNUSED(ignored))
result = Py_NewRef(Py_None); result = Py_NewRef(Py_None);
finally: finally:
PyMem_Del(spec); PyMem_Free(spec);
PyMem_Del(name); PyMem_Free(name);
PyMem_Del(doc); PyMem_Free(doc);
PyMem_Del(slots); PyMem_Free(slots);
Py_XDECREF(class); Py_XDECREF(class);
Py_XDECREF(instance); Py_XDECREF(instance);
Py_XDECREF(obj); Py_XDECREF(obj);