mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
gh-102381: don't call watcher callback with dead object (#102382)
Co-authored-by: T. Wouters <thomas@python.org>
This commit is contained in:
parent
a33ca2ad1f
commit
1e703a4733
12 changed files with 243 additions and 38 deletions
|
@ -172,6 +172,11 @@ bound into a function.
|
|||
before the destruction of *co* takes place, so the prior state of *co*
|
||||
can be inspected.
|
||||
|
||||
If *event* is ``PY_CODE_EVENT_DESTROY``, taking a reference in the callback
|
||||
to the about-to-be-destroyed code object will resurrect it and prevent it
|
||||
from being freed at this time. When the resurrected object is destroyed
|
||||
later, any watcher callbacks active at that time will be called again.
|
||||
|
||||
Users of this API should not rely on internal runtime implementation
|
||||
details. Such details may include, but are not limited to, the exact
|
||||
order and timing of creation and destruction of code objects. While
|
||||
|
@ -179,9 +184,15 @@ bound into a function.
|
|||
(including whether a callback is invoked or not), it does not change
|
||||
the semantics of the Python code being executed.
|
||||
|
||||
If the callback returns with an exception set, it must return ``-1``; this
|
||||
exception will be printed as an unraisable exception using
|
||||
:c:func:`PyErr_WriteUnraisable`. Otherwise it should return ``0``.
|
||||
If the callback sets an exception, it must return ``-1``; this exception will
|
||||
be printed as an unraisable exception using :c:func:`PyErr_WriteUnraisable`.
|
||||
Otherwise it should return ``0``.
|
||||
|
||||
There may already be a pending exception set on entry to the callback. In
|
||||
this case, the callback should return ``0`` with the same exception still
|
||||
set. This means the callback may not call any other API that can set an
|
||||
exception unless it saves and clears the exception state first, and restores
|
||||
it before returning.
|
||||
|
||||
.. versionadded:: 3.12
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue