Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 0 additions & 24 deletions Lib/_pyio.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1185,7 +1185,6 @@ def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE):
self.buffer_size = buffer_size
self._write_buf = bytearray()
self._write_lock = Lock()
_register_writer(self)

def writable(self):
return self.raw.writable()
Expand DownExpand Up@@ -2575,26 +2574,3 @@ def encoding(self):
def detach(self):
# This doesn't make sense on StringIO.
self._unsupported("detach")


# ____________________________________________________________

import atexit, weakref

_all_writers = weakref.WeakSet()

def _register_writer(w):
# keep weak-ref to buffered writer
_all_writers.add(w)

def _flush_all_writers():
# Ensure all buffered writers are flushed before proceeding with
# normal shutdown. Otherwise, if the underlying file objects get
# finalized before the buffered writer wrapping it then any buffered
# data will be lost.
for w in _all_writers:
try:
w.flush()
except:
pass
atexit.register(_flush_all_writers)

This file was deleted.

2 changes: 0 additions & 2 deletions Modules/_io/_iomodule.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -766,8 +766,6 @@ PyInit__io(void)
!(_PyIO_empty_bytes = PyBytes_FromStringAndSize(NULL, 0)))
goto fail;

_Py_PyAtExit(_PyIO_atexit_flush);

state->initialized = 1;

return m;
Expand Down
2 changes: 0 additions & 2 deletions Modules/_io/_iomodule.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,5 +183,3 @@ extern PyObject *_PyIO_empty_str;
extern PyObject *_PyIO_empty_bytes;

extern PyTypeObject _PyBytesIOBuffer_Type;

extern void _PyIO_atexit_flush(void);
46 changes: 1 addition & 45 deletions Modules/_io/bufferedio.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -196,7 +196,7 @@ bufferediobase_write(PyObject *self, PyObject *args)
}


typedef struct _buffered {
typedef struct{
PyObject_HEAD

PyObject *raw;
Expand DownExpand Up@@ -240,18 +240,8 @@ typedef struct _buffered{

PyObject *dict;
PyObject *weakreflist;

/* a doubly-linked chained list of "buffered" objects that need to
be flushed when the process exits */
struct _buffered *next, *prev;
} buffered;

/* the actual list of buffered objects */
static buffered buffer_list_end ={
.next = &buffer_list_end,
.prev = &buffer_list_end
};

/*
Implementation notes:

Expand DownExpand Up@@ -396,15 +386,6 @@ _enter_buffered_busy(buffered *self)
(self->buffer_size * (size / self->buffer_size)))


static void
remove_from_linked_list(buffered *self)
{
self->next->prev = self->prev;
self->prev->next = self->next;
self->prev = NULL;
self->next = NULL;
}

static void
buffered_dealloc(buffered *self)
{
Expand All@@ -413,8 +394,6 @@ buffered_dealloc(buffered *self)
return;
_PyObject_GC_UNTRACK(self);
self->ok = 0;
if (self->next != NULL)
remove_from_linked_list(self);
if (self->weakreflist != NULL)
PyObject_ClearWeakRefs((PyObject *)self);
Py_CLEAR(self->raw);
Expand DownExpand Up@@ -1838,33 +1817,10 @@ _io_BufferedWriter___init___impl(buffered *self, PyObject *raw,
self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedWriter_Type &&
Py_TYPE(raw) == &PyFileIO_Type);

if (self->next == NULL){
self->prev = &buffer_list_end;
self->next = buffer_list_end.next;
buffer_list_end.next->prev = self;
buffer_list_end.next = self;
}

self->ok = 1;
return 0;
}

/*
* Ensure all buffered writers are flushed before proceeding with
* normal shutdown. Otherwise, if the underlying file objects get
* finalized before the buffered writer wrapping it then any buffered
* data will be lost.
*/
void _PyIO_atexit_flush(void)
{
while (buffer_list_end.next != &buffer_list_end){
buffered *buf = buffer_list_end.next;
remove_from_linked_list(buf);
buffered_flush(buf, NULL);
PyErr_Clear();
}
}

static Py_ssize_t
_bufferedwriter_raw_write(buffered *self, char *start, Py_ssize_t len)
{
Expand Down