summaryrefslogtreecommitdiff
path: root/Modules/_io
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2014-05-09 00:24:50 +0200
committerAntoine Pitrou <solipsis@pitrou.net>2014-05-09 00:24:50 +0200
commitf2dde0a5269fe5697c68b0336d42223b3db2df7e (patch)
tree1ace73c22352859e9005dd2cb9d627a030eadc5b /Modules/_io
parent0b56e591056de263f0d7005beef89dfcb63781fa (diff)
downloadcpython-f2dde0a5269fe5697c68b0336d42223b3db2df7e.tar.gz
Issue #21396: Fix TextIOWrapper(..., write_through=True) to not force a flush() on the underlying binary stream.
Patch by akira.
Diffstat (limited to 'Modules/_io')
-rw-r--r--Modules/_io/textio.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 5739bc4d01..ba5789d3c7 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -1297,7 +1297,7 @@ textiowrapper_write(textio *self, PyObject *args)
PyObject *b;
Py_ssize_t textlen;
int haslf = 0;
- int needflush = 0;
+ int needflush = 0, text_needflush = 0;
CHECK_INITIALIZED(self);
@@ -1331,8 +1331,8 @@ textiowrapper_write(textio *self, PyObject *args)
}
if (self->write_through)
- needflush = 1;
- else if (self->line_buffering &&
+ text_needflush = 1;
+ if (self->line_buffering &&
(haslf ||
PyUnicode_FindChar(text, '\r', 0, PyUnicode_GET_LENGTH(text), 1) != -1))
needflush = 1;
@@ -1363,7 +1363,8 @@ textiowrapper_write(textio *self, PyObject *args)
}
self->pending_bytes_count += PyBytes_GET_SIZE(b);
Py_DECREF(b);
- if (self->pending_bytes_count > self->chunk_size || needflush) {
+ if (self->pending_bytes_count > self->chunk_size || needflush ||
+ text_needflush) {
if (_textiowrapper_writeflush(self) < 0)
return NULL;
}