mirror of
https://github.com/python/cpython.git
synced 2025-11-25 12:44:13 +00:00
gh-124470: Fix crash when reading from object instance dictionary while replacing it (#122489)
Delay free a dictionary when replacing it
This commit is contained in:
parent
3926842117
commit
bf542f8bb9
7 changed files with 294 additions and 90 deletions
|
|
@ -120,11 +120,25 @@ extern int _PyMem_DebugEnabled(void);
|
|||
extern void _PyMem_FreeDelayed(void *ptr);
|
||||
|
||||
// Enqueue an object to be freed possibly after some delay
|
||||
extern void _PyObject_FreeDelayed(void *ptr);
|
||||
#ifdef Py_GIL_DISABLED
|
||||
extern void _PyObject_XDecRefDelayed(PyObject *obj);
|
||||
#else
|
||||
static inline void _PyObject_XDecRefDelayed(PyObject *obj)
|
||||
{
|
||||
Py_XDECREF(obj);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Periodically process delayed free requests.
|
||||
extern void _PyMem_ProcessDelayed(PyThreadState *tstate);
|
||||
|
||||
|
||||
// Periodically process delayed free requests when the world is stopped.
|
||||
// Notify of any objects whic should be freeed.
|
||||
typedef void (*delayed_dealloc_cb)(PyObject *, void *);
|
||||
extern void _PyMem_ProcessDelayedNoDealloc(PyThreadState *tstate,
|
||||
delayed_dealloc_cb cb, void *state);
|
||||
|
||||
// Abandon all thread-local delayed free requests and push them to the
|
||||
// interpreter's queue.
|
||||
extern void _PyMem_AbandonDelayed(PyThreadState *tstate);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue