diff options
-rw-r--r-- | ext/mysqlnd/mysqlnd_vio.c | 5 | ||||
-rw-r--r-- | main/streams/streams.c | 4 |
2 files changed, 5 insertions, 4 deletions
diff --git a/ext/mysqlnd/mysqlnd_vio.c b/ext/mysqlnd/mysqlnd_vio.c index 997fbd4d68..50db782be6 100644 --- a/ext/mysqlnd/mysqlnd_vio.c +++ b/ext/mysqlnd/mysqlnd_vio.c @@ -79,14 +79,12 @@ MYSQLND_METHOD(mysqlnd_vio, network_read)(MYSQLND_VIO * const vio, zend_uchar * { enum_func_status return_value = PASS; php_stream * net_stream = vio->data->m.get_stream(vio); - size_t old_chunk_size = net_stream->chunk_size; size_t to_read = count, ret; zend_uchar * p = buffer; DBG_ENTER("mysqlnd_vio::network_read"); DBG_INF_FMT("count="MYSQLND_SZ_T_SPEC, count); - net_stream->chunk_size = MIN(to_read, vio->data->options.net_read_buffer_size); while (to_read) { if (!(ret = php_stream_read(net_stream, (char *) p, to_read))) { DBG_ERR_FMT("Error while reading header from socket"); @@ -97,7 +95,6 @@ MYSQLND_METHOD(mysqlnd_vio, network_read)(MYSQLND_VIO * const vio, zend_uchar * to_read -= ret; } MYSQLND_INC_CONN_STATISTIC_W_VALUE(stats, STAT_BYTES_RECEIVED, count - to_read); - net_stream->chunk_size = old_chunk_size; DBG_RETURN(return_value); } /* }}} */ @@ -265,6 +262,8 @@ MYSQLND_METHOD(mysqlnd_vio, post_connect_set_opt)(MYSQLND_VIO * const vio, const /* TCP -> Set SO_KEEPALIVE */ mysqlnd_set_sock_keepalive(net_stream); } + + net_stream->chunk_size = vio->data->options.net_read_buffer_size; } DBG_VOID_RETURN; 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; } |