Revert "bpo-17852: Maintain a list of BufferedWriter objects. Flush … · python/cpython@db56423
@@ -196,7 +196,7 @@ bufferediobase_write(PyObject *self, PyObject *args)
196196}
197197198198199-typedef struct _buffered {
199+typedef struct {
200200PyObject_HEAD
201201202202PyObject *raw;
@@ -240,18 +240,8 @@ typedef struct _buffered {
240240241241PyObject *dict;
242242PyObject *weakreflist;
243-244-/* a doubly-linked chained list of "buffered" objects that need to
245- be flushed when the process exits */
246-struct _buffered *next, *prev;
247243} buffered;
248244249-/* the actual list of buffered objects */
250-static buffered buffer_list_end = {
251- .next = &buffer_list_end,
252- .prev = &buffer_list_end
253-};
254-255245/*
256246 Implementation notes:
257247@@ -396,15 +386,6 @@ _enter_buffered_busy(buffered *self)
396386 (self->buffer_size * (size / self->buffer_size)))
397387398388399-static void
400-remove_from_linked_list(buffered *self)
401-{
402-self->next->prev = self->prev;
403-self->prev->next = self->next;
404-self->prev = NULL;
405-self->next = NULL;
406-}
407-408389static void
409390buffered_dealloc(buffered *self)
410391{
@@ -413,8 +394,6 @@ buffered_dealloc(buffered *self)
413394return;
414395_PyObject_GC_UNTRACK(self);
415396self->ok = 0;
416-if (self->next != NULL)
417-remove_from_linked_list(self);
418397if (self->weakreflist != NULL)
419398PyObject_ClearWeakRefs((PyObject *)self);
420399Py_CLEAR(self->raw);
@@ -1838,33 +1817,10 @@ _io_BufferedWriter___init___impl(buffered *self, PyObject *raw,
18381817self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedWriter_Type &&
18391818Py_TYPE(raw) == &PyFileIO_Type);
184018191841-if (self->next == NULL) {
1842-self->prev = &buffer_list_end;
1843-self->next = buffer_list_end.next;
1844-buffer_list_end.next->prev = self;
1845-buffer_list_end.next = self;
1846- }
1847-18481820self->ok = 1;
18491821return 0;
18501822}
185118231852-/*
1853-* Ensure all buffered writers are flushed before proceeding with
1854-* normal shutdown. Otherwise, if the underlying file objects get
1855-* finalized before the buffered writer wrapping it then any buffered
1856-* data will be lost.
1857-*/
1858-void _PyIO_atexit_flush(void)
1859-{
1860-while (buffer_list_end.next != &buffer_list_end) {
1861-buffered *buf = buffer_list_end.next;
1862-remove_from_linked_list(buf);
1863-buffered_flush(buf, NULL);
1864-PyErr_Clear();
1865- }
1866-}
1867-18681824static Py_ssize_t
18691825_bufferedwriter_raw_write(buffered *self, char *start, Py_ssize_t len)
18701826{