FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Update PyObject_Del() documentation by vstinner · Pull Request #122597 · python/cpython · GitHub

Repository navigation

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .c  (2) .rst  (2) All 2 file types selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
7 changes: 1 addition & 6 deletions Doc/c-api/allocation.rst
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
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,7 @@ Allocating Objects on the Heap

.. c:function:: void PyObject_Del(void *op)

Releases memory allocated to an object using :c:macro:`PyObject_New` or
: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.

Same as :c:func:`PyObject_Free`.

.. c:var:: PyObject _Py_NoneStruct

Expand Down
6 changes: 3 additions & 3 deletions Doc/c-api/memory.rst
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
Original file line number Diff line number Diff line change
Expand Up @@ -734,7 +734,7 @@ The same code using the type-oriented function set::
return PyErr_NoMemory();
/* ...Do some I/O operation involving buf... */
res = PyBytes_FromString(buf);
PyMem_Del(buf); /* allocated with PyMem_New */
PyMem_Free(buf); /* allocated with PyMem_New */
return res;

Note that in the two examples above, the buffer is always manipulated via
Expand All @@ -750,11 +750,11 @@ allocators operating on different heaps. ::
...
PyMem_Del(buf3); /* Wrong -- should be PyMem_Free() */
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
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
object types in C.
2 changes: 1 addition & 1 deletion Modules/_sre/sre.c
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
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ state_fini(SRE_STATE* state)
PyBuffer_Release(&state->buffer);
Py_XDECREF(state->string);
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);
state->mark = NULL;
}
Expand Down
16 changes: 8 additions & 8 deletions Modules/_testcapi/heaptype.c
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
Original file line number Diff line number Diff line change
Expand Up @@ -269,16 +269,16 @@ test_type_from_ephemeral_spec(PyObject *self, PyObject *Py_UNUSED(ignored))
// (Explicitly overwrite memory before freeing,
// so bugs show themselves even without the debug allocator's help.)
memset(spec, 0xdd, sizeof(PyType_Spec));
PyMem_Del(spec);
PyMem_Free(spec);
spec = NULL;
memset(name, 0xdd, sizeof(NAME));
PyMem_Del(name);
PyMem_Free(name);
name = NULL;
memset(doc, 0xdd, sizeof(DOC));
PyMem_Del(doc);
PyMem_Free(doc);
doc = NULL;
memset(slots, 0xdd, 3 * sizeof(PyType_Slot));
PyMem_Del(slots);
PyMem_Free(slots);
slots = NULL;

/* check that everything works */
Expand All @@ -304,10 +304,10 @@ test_type_from_ephemeral_spec(PyObject *self, PyObject *Py_UNUSED(ignored))

result = Py_NewRef(Py_None);
finally:
PyMem_Del(spec);
PyMem_Del(name);
PyMem_Del(doc);
PyMem_Del(slots);
PyMem_Free(spec);
PyMem_Free(name);
PyMem_Free(doc);
PyMem_Free(slots);
Py_XDECREF(class);
Py_XDECREF(instance);
Py_XDECREF(obj);
Expand Down

Back | FazBrowse Home | New Git URL