Skip to content

Commit fcfa006

Browse files
committed
Avoid useless stream buffer copying and workaround with chunk_size manipulation.
1 parent bc56bb8 commit fcfa006

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

ext/mysqlnd/mysqlnd_vio.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,12 @@ MYSQLND_METHOD(mysqlnd_vio, network_read)(MYSQLND_VIO * const vio, zend_uchar *
7979
{
8080
enum_func_status return_value = PASS;
8181
php_stream * net_stream = vio->data->m.get_stream(vio);
82-
size_t old_chunk_size = net_stream->chunk_size;
8382
size_t to_read = count, ret;
8483
zend_uchar * p = buffer;
8584

8685
DBG_ENTER("mysqlnd_vio::network_read");
8786
DBG_INF_FMT("count="MYSQLND_SZ_T_SPEC, count);
8887

89-
net_stream->chunk_size = MIN(to_read, vio->data->options.net_read_buffer_size);
9088
while (to_read) {
9189
if (!(ret = php_stream_read(net_stream, (char *) p, to_read))) {
9290
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 *
9795
to_read -= ret;
9896
}
9997
MYSQLND_INC_CONN_STATISTIC_W_VALUE(stats, STAT_BYTES_RECEIVED, count - to_read);
100-
net_stream->chunk_size = old_chunk_size;
10198
DBG_RETURN(return_value);
10299
}
103100
/* }}} */
@@ -265,6 +262,8 @@ MYSQLND_METHOD(mysqlnd_vio, post_connect_set_opt)(MYSQLND_VIO * const vio, const
265262
/* TCP -> Set SO_KEEPALIVE */
266263
mysqlnd_set_sock_keepalive(net_stream);
267264
}
265+
266+
net_stream->chunk_size = vio->data->options.net_read_buffer_size;
268267
}
269268

270269
DBG_VOID_RETURN;

main/streams/streams.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,9 @@ PHPAPI void _php_stream_fill_read_buffer(php_stream *stream, size_t size)
624624

625625
/* reduce buffer memory consumption if possible, to avoid a realloc */
626626
if (stream->readbuf && stream->readbuflen - stream->writepos < stream->chunk_size) {
627-
memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->readbuflen - stream->readpos);
627+
if (stream->writepos > stream->readpos) {
628+
memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->writepos - stream->readpos);
629+
}
628630
stream->writepos -= stream->readpos;
629631
stream->readpos = 0;
630632
}

0 commit comments

Comments
 (0)