[New-bugs-announce] [issue45210] tp_dealloc docs should mention error indicator may be set
Edward Yang
report at bugs.python.org
Wed Sep 15 12:47:23 EDT 2021
New submission from Edward Yang <ezyang at mit.edu>:
The fact that the error indicator may be set during tp_dealloc is somewhat well known (https://github.com/posborne/dbus-python/blob/fef4bccfc535c6c2819e3f15384600d7bc198bc5/_dbus_bindings/conn.c#L387) but it's not documented in the official manual. We should document it.
A simple suggested patch:
diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst
index b17fb22b69..e7c9b13646 100644
--- a/Doc/c-api/typeobj.rst
+++ b/Doc/c-api/typeobj.rst
@@ -668,6 +668,20 @@ and :c:type:`PyType_Type` effectively act as defaults.)
:c:func:`PyObject_GC_Del` if the instance was allocated using
:c:func:`PyObject_GC_New` or :c:func:`PyObject_GC_NewVar`.
+ If you may call functions that may set the error indicator, you must
+ use :c:func:`PyErr_Fetch` and :c:func:`PyErr_Restore` to ensure you
+ don't clobber a preexisting error indicator (the deallocation could
+ have occurred while processing a different error):
+
+ .. code-block:: c
+
+ static void foo_dealloc(foo_object *self) {
+ PyObject *et, *ev, *etb;
+ PyErr_Fetch(&et, &ev, &etb);
+ ...
+ PyErr_Restore(et, ev, etb);
+ }
+
Finally, if the type is heap allocated (:const:`Py_TPFLAGS_HEAPTYPE`), the
deallocator should decrement the reference count for its type object after
calling the type deallocator. In order to avoid dangling pointers, the
----------
assignee: docs at python
components: Documentation
messages: 401854
nosy: docs at python, ezyang
priority: normal
severity: normal
status: open
title: tp_dealloc docs should mention error indicator may be set
type: enhancement
versions: Python 3.11
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue45210>
_______________________________________
More information about the New-bugs-announce
mailing list