mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
gh-102304: Consolidate Direct Usage of _Py_RefTotal (gh-102514)
This simplifies further changes to _Py_RefTotal (e.g. make it atomic or move it to PyInterpreterState). https://github.com/python/cpython/issues/102304
This commit is contained in:
parent
11a2c6ce51
commit
cbb0aa71d0
10 changed files with 127 additions and 45 deletions
|
|
@ -490,7 +490,21 @@ you can count such references to the type object.)
|
|||
*/
|
||||
|
||||
#ifdef Py_REF_DEBUG
|
||||
PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
|
||||
# if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030A0000
|
||||
extern Py_ssize_t _Py_RefTotal;
|
||||
# define _Py_INC_REFTOTAL() _Py_RefTotal++
|
||||
# define _Py_DEC_REFTOTAL() _Py_RefTotal--
|
||||
# elif defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
||||
extern void _Py_IncRefTotal(void);
|
||||
extern void _Py_DecRefTotal(void);
|
||||
# define _Py_INC_REFTOTAL() _Py_IncRefTotal()
|
||||
# define _Py_DEC_REFTOTAL() _Py_DecRefTotal()
|
||||
# elif !defined(Py_LIMITED_API) || Py_LIMITED_API+0 > 0x030C0000
|
||||
extern void _Py_IncRefTotal_DO_NOT_USE_THIS(void);
|
||||
extern void _Py_DecRefTotal_DO_NOT_USE_THIS(void);
|
||||
# define _Py_INC_REFTOTAL() _Py_IncRefTotal_DO_NOT_USE_THIS()
|
||||
# define _Py_DEC_REFTOTAL() _Py_DecRefTotal_DO_NOT_USE_THIS()
|
||||
# endif
|
||||
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
|
||||
PyObject *op);
|
||||
#endif /* Py_REF_DEBUG */
|
||||
|
|
@ -519,8 +533,8 @@ static inline void Py_INCREF(PyObject *op)
|
|||
// Non-limited C API and limited C API for Python 3.9 and older access
|
||||
// directly PyObject.ob_refcnt.
|
||||
#ifdef Py_REF_DEBUG
|
||||
_Py_RefTotal++;
|
||||
#endif
|
||||
_Py_INC_REFTOTAL();
|
||||
#endif // Py_REF_DEBUG
|
||||
op->ob_refcnt++;
|
||||
#endif
|
||||
}
|
||||
|
|
@ -539,7 +553,7 @@ static inline void Py_DECREF(PyObject *op) {
|
|||
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
|
||||
{
|
||||
_Py_DECREF_STAT_INC();
|
||||
_Py_RefTotal--;
|
||||
_Py_DEC_REFTOTAL();
|
||||
if (--op->ob_refcnt != 0) {
|
||||
if (op->ob_refcnt < 0) {
|
||||
_Py_NegativeRefcount(filename, lineno, op);
|
||||
|
|
@ -564,6 +578,9 @@ static inline void Py_DECREF(PyObject *op)
|
|||
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
|
||||
#endif
|
||||
|
||||
#undef _Py_INC_REFTOTAL
|
||||
#undef _Py_DEC_REFTOTAL
|
||||
|
||||
|
||||
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
|
||||
* and tp_dealloc implementations.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue