@@ -438,7 +438,7 @@ _Py_DECREF_CODE(PyCodeObject *co)
438438
439439extern void _Py_CandidateCycleRoot (PyObject * op );
440440
441- static inline void Py_DECREF_MORTAL (const char * filename , int lineno , PyObject * op )
441+ static inline void Py_DecrefMortal (const char * filename , int lineno , PyObject * op )
442442{
443443 if (op -> ob_refcnt <= 0 ) {
444444 _Py_NegativeRefcount (filename , lineno , op );
@@ -451,11 +451,13 @@ static inline void Py_DECREF_MORTAL(const char *filename, int lineno, PyObject *
451451 if (-- op -> ob_refcnt == 0 ) {
452452 _Py_Dealloc (op );
453453 }
454- else if (PyObject_GC_IsTracked (op )) {
455- _Py_CandidateCycleRoot (op );
454+ else {
455+ if (PyObject_GC_IsTracked (op )) {
456+ _Py_CandidateCycleRoot (op );
457+ }
456458 }
457459}
458- #define Py_DECREF_MORTAL (op ) Py_DECREF_MORTAL (__FILE__, __LINE__, _PyObject_CAST(op))
460+ #define Py_DECREF_MORTAL (op ) Py_DecrefMortal (__FILE__, __LINE__, _PyObject_CAST(op))
459461
460462static inline void _Py_DECREF_MORTAL_SPECIALIZED (const char * filename , int lineno , PyObject * op , destructor destruct )
461463{
@@ -486,6 +488,7 @@ extern Py_NO_INLINE PyAPI_FUNC(void) Py_DECREF_MORTAL(PyObject *op);
486488static inline void Py_DECREF_MORTAL_SPECIALIZED (PyObject * op , destructor destruct )
487489{
488490 assert (!_Py_IsStaticImmortal (op ));
491+ assert (!PyObject_GC_IsTracked (op ));
489492 _Py_DECREF_STAT_INC ();
490493 if (-- op -> ob_refcnt == 0 ) {
491494 _PyReftracerTrack (op , PyRefTracer_DESTROY );
@@ -852,9 +855,7 @@ _PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET(PyObject *op)
852855static inline int
853856_PyObject_IS_GC (PyObject * obj )
854857{
855- PyTypeObject * type = Py_TYPE (obj );
856- return (_PyType_IS_GC (type )
857- && (type -> tp_is_gc == NULL || type -> tp_is_gc (obj )));
858+ return (obj -> ob_flags & _Py_GC_OBJECT ) != 0 ;
858859}
859860
860861// Fast inlined version of PyObject_Hash()
0 commit comments