@@ -368,6 +368,15 @@ _enter_buffered_busy(buffered *self)
368368 (self->buffer_size * (size / self->buffer_size)))
369369
370370
371+ static int
372+ buffered_clear (buffered * self )
373+ {
374+ self -> ok = 0 ;
375+ Py_CLEAR (self -> raw );
376+ Py_CLEAR (self -> dict );
377+ return 0 ;
378+ }
379+
371380static void
372381buffered_dealloc (buffered * self )
373382{
@@ -379,7 +388,6 @@ buffered_dealloc(buffered *self)
379388 self -> ok = 0 ;
380389 if (self -> weakreflist != NULL )
381390 PyObject_ClearWeakRefs ((PyObject * )self );
382- Py_CLEAR (self -> raw );
383391 if (self -> buffer ) {
384392 PyMem_Free (self -> buffer );
385393 self -> buffer = NULL ;
@@ -388,7 +396,7 @@ buffered_dealloc(buffered *self)
388396 PyThread_free_lock (self -> lock );
389397 self -> lock = NULL ;
390398 }
391- Py_CLEAR ( self -> dict );
399+ ( void ) buffered_clear ( self );
392400 tp -> tp_free ((PyObject * )self );
393401 Py_DECREF (tp );
394402}
@@ -412,15 +420,6 @@ buffered_traverse(buffered *self, visitproc visit, void *arg)
412420 return 0 ;
413421}
414422
415- static int
416- buffered_clear (buffered * self )
417- {
418- self -> ok = 0 ;
419- Py_CLEAR (self -> raw );
420- Py_CLEAR (self -> dict );
421- return 0 ;
422- }
423-
424423/* Because this can call arbitrary code, it shouldn't be called when
425424 the refcount is 0 (that is, not directly from tp_dealloc unless
426425 the refcount has been temporarily re-incremented). */
@@ -2128,6 +2127,8 @@ bufferedrwpair_traverse(rwpair *self, visitproc visit, void *arg)
21282127{
21292128 Py_VISIT (Py_TYPE (self ));
21302129 Py_VISIT (self -> dict );
2130+ Py_VISIT (self -> reader );
2131+ Py_VISIT (self -> writer );
21312132 return 0 ;
21322133}
21332134
@@ -2147,9 +2148,7 @@ bufferedrwpair_dealloc(rwpair *self)
21472148 _PyObject_GC_UNTRACK (self );
21482149 if (self -> weakreflist != NULL )
21492150 PyObject_ClearWeakRefs ((PyObject * )self );
2150- Py_CLEAR (self -> reader );
2151- Py_CLEAR (self -> writer );
2152- Py_CLEAR (self -> dict );
2151+ (void )bufferedrwpair_clear (self );
21532152 tp -> tp_free ((PyObject * ) self );
21542153 Py_DECREF (tp );
21552154}
0 commit comments