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 {

200200

PyObject_HEAD

201201202202

PyObject *raw;

@@ -240,18 +240,8 @@ typedef struct _buffered {

240240241241

PyObject *dict;

242242

PyObject *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-408389

static void

409390

buffered_dealloc(buffered *self)

410391

{

@@ -413,8 +394,6 @@ buffered_dealloc(buffered *self)

413394

return;

414395

_PyObject_GC_UNTRACK(self);

415396

self->ok = 0;

416-

if (self->next != NULL)

417-

remove_from_linked_list(self);

418397

if (self->weakreflist != NULL)

419398

PyObject_ClearWeakRefs((PyObject *)self);

420399

Py_CLEAR(self->raw);

@@ -1838,33 +1817,10 @@ _io_BufferedWriter___init___impl(buffered *self, PyObject *raw,

18381817

self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedWriter_Type &&

18391818

Py_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-18481820

self->ok = 1;

18491821

return 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-18681824

static Py_ssize_t

18691825

_bufferedwriter_raw_write(buffered *self, char *start, Py_ssize_t len)

18701826

{