summaryrefslogtreecommitdiff
path: root/main/streams/streams.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-06-14 02:34:17 +0300
committerDmitry Stogov <dmitry@zend.com>2018-06-14 02:34:17 +0300
commitfcfa006a4e11a95fb0e717b97164dbd4e23297bf (patch)
tree04f5a12a83cf3edbb09af72e009ec3fb9c3539eb /main/streams/streams.c
parentbc56bb847d317a46b6d95131da1d6596a19f880c (diff)
downloadphp-git-fcfa006a4e11a95fb0e717b97164dbd4e23297bf.tar.gz
Avoid useless stream buffer copying and workaround with chunk_size manipulation.
Diffstat (limited to 'main/streams/streams.c')
-rw-r--r--main/streams/streams.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c
index b82f092f0c..6f77b29af8 100644
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -624,7 +624,9 @@ PHPAPI void _php_stream_fill_read_buffer(php_stream *stream, size_t size)
/* reduce buffer memory consumption if possible, to avoid a realloc */
if (stream->readbuf && stream->readbuflen - stream->writepos < stream->chunk_size) {
- memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->readbuflen - stream->readpos);
+ if (stream->writepos > stream->readpos) {
+ memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->writepos - stream->readpos);
+ }
stream->writepos -= stream->readpos;
stream->readpos = 0;
}