mirror of
https://github.com/python/cpython.git
synced 2025-11-03 03:22:27 +00:00
Revert "gh-98724: Fix Py_CLEAR() macro side effects" (#99737)
Revert "gh-98724: Fix Py_CLEAR() macro side effects (#99100)"
This reverts commit c03e05c2e7.
This commit is contained in:
parent
0da728387c
commit
3a803bcaac
5 changed files with 29 additions and 172 deletions
|
|
@ -7,8 +7,8 @@
|
|||
Reference Counting
|
||||
******************
|
||||
|
||||
The functions and macros in this section are used for managing reference counts
|
||||
of Python objects.
|
||||
The macros in this section are used for managing reference counts of Python
|
||||
objects.
|
||||
|
||||
|
||||
.. c:function:: Py_ssize_t Py_REFCNT(PyObject *o)
|
||||
|
|
@ -129,11 +129,6 @@ of Python objects.
|
|||
It is a good idea to use this macro whenever decrementing the reference
|
||||
count of an object that might be traversed during garbage collection.
|
||||
|
||||
.. versionchanged:: 3.12
|
||||
The macro argument is now only evaluated once. If the argument has side
|
||||
effects, these are no longer duplicated.
|
||||
|
||||
|
||||
.. c:function:: void Py_IncRef(PyObject *o)
|
||||
|
||||
Increment the reference count for object *o*. A function version of :c:func:`Py_XINCREF`.
|
||||
|
|
@ -144,40 +139,3 @@ of Python objects.
|
|||
|
||||
Decrement the reference count for object *o*. A function version of :c:func:`Py_XDECREF`.
|
||||
It can be used for runtime dynamic embedding of Python.
|
||||
|
||||
|
||||
.. c:macro:: Py_SETREF(dst, src)
|
||||
|
||||
Macro safely decrementing the `dst` reference count and setting `dst` to
|
||||
`src`.
|
||||
|
||||
As in case of :c:func:`Py_CLEAR`, "the obvious" code can be deadly::
|
||||
|
||||
Py_DECREF(dst);
|
||||
dst = src;
|
||||
|
||||
The safe way is::
|
||||
|
||||
Py_SETREF(dst, src);
|
||||
|
||||
That arranges to set `dst` to `src` _before_ decrementing reference count of
|
||||
*dst* old value, so that any code triggered as a side-effect of `dst`
|
||||
getting torn down no longer believes `dst` points to a valid object.
|
||||
|
||||
.. versionadded:: 3.6
|
||||
|
||||
.. versionchanged:: 3.12
|
||||
The macro arguments are now only evaluated once. If an argument has side
|
||||
effects, these are no longer duplicated.
|
||||
|
||||
|
||||
.. c:macro:: Py_XSETREF(dst, src)
|
||||
|
||||
Variant of :c:macro:`Py_SETREF` macro that uses :c:func:`Py_XDECREF` instead
|
||||
of :c:func:`Py_DECREF`.
|
||||
|
||||
.. versionadded:: 3.6
|
||||
|
||||
.. versionchanged:: 3.12
|
||||
The macro arguments are now only evaluated once. If an argument has side
|
||||
effects, these are no longer duplicated.
|
||||
|
|
|
|||
|
|
@ -822,11 +822,6 @@ Porting to Python 3.12
|
|||
:class:`bytes` type is accepted for bytes strings.
|
||||
(Contributed by Victor Stinner in :gh:`98393`.)
|
||||
|
||||
* The :c:macro:`Py_CLEAR`, :c:macro:`Py_SETREF` and :c:macro:`Py_XSETREF`
|
||||
macros now only evaluate their argument once. If the argument has side
|
||||
effects, these side effects are no longer duplicated.
|
||||
(Contributed by Victor Stinner in :gh:`98724`.)
|
||||
|
||||
Deprecated
|
||||
----------
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue