]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Note that tp_clear and m_clear are not always called (GH-27581) (GH-27597)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 4 Aug 2021 18:24:03 +0000 (11:24 -0700)
committerGitHub <noreply@github.com>
Wed, 4 Aug 2021 18:24:03 +0000 (20:24 +0200)
(cherry picked from commit 10faada709561663d6b1f623d308ff45e3808cca)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
Doc/c-api/module.rst
Doc/c-api/typeobj.rst

index 90766dca78bfa759143593a6aa5b4d867776c8c5..f0569ed4fca3540515c218953f6127cd4d07885e 100644 (file)
@@ -221,6 +221,12 @@ or request "multi-phase initialization" by returning the definition struct itsel
       than 0 and the module state (as returned by :c:func:`PyModule_GetState`)
       is ``NULL``.
 
+      Like :c:member:`PyTypeObject.tp_clear`, this function is not *always*
+      called before a module is deallocated. For example, when reference
+      counting is enough to determine that an object is no longer used,
+      the cyclic garbage collector is not involved and
+      :c:member:`~PyModuleDef.m_free` is called directly.
+
       .. versionchanged:: 3.9
          No longer called before the module state is allocated.
 
index ddcb8ae3d0950ceb5adb995970f35e474a25973e..5a1f5f994dddd765ed236b44d3bf5599b446978b 100644 (file)
@@ -1294,6 +1294,12 @@ and :c:type:`PyType_Type` effectively act as defaults.)
    so that *self* knows the contained object can no longer be used.  The
    :c:func:`Py_CLEAR` macro performs the operations in a safe order.
 
+   Note that :c:member:`~PyTypeObject.tp_clear` is not *always* called
+   before an instance is deallocated. For example, when reference counting
+   is enough to determine that an object is no longer used, the cyclic garbage
+   collector is not involved and :c:member:`~PyTypeObject.tp_dealloc` is
+   called directly.
+
    Because the goal of :c:member:`~PyTypeObject.tp_clear` functions is to break reference cycles,
    it's not necessary to clear contained objects like Python strings or Python
    integers, which can't participate in reference cycles. On the other hand, it may