diff options
| -rw-r--r-- | ext/mysqlnd/mysqlnd_connection.c | 2 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_protocol_frame_codec.c | 27 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_structs.h | 5 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_vio.c | 22 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_wireprotocol.c | 40 |
5 files changed, 49 insertions, 47 deletions
diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c index 140073e12c..d68d346f98 100644 --- a/ext/mysqlnd/mysqlnd_connection.c +++ b/ext/mysqlnd/mysqlnd_connection.c @@ -1674,10 +1674,10 @@ MYSQLND_METHOD(mysqlnd_conn_data, set_client_option)(MYSQLND_CONN_DATA * const c case MYSQLND_OPT_SSL_CIPHER: case MYSQL_OPT_SSL_VERIFY_SERVER_CERT: case MYSQL_OPT_CONNECT_TIMEOUT: - case MYSQLND_OPT_NET_CMD_BUFFER_SIZE: case MYSQLND_OPT_NET_READ_BUFFER_SIZE: ret = conn->vio->data->m.set_client_option(conn->vio, option, value); break; + case MYSQLND_OPT_NET_CMD_BUFFER_SIZE: case MYSQL_OPT_COMPRESS: case MYSQL_SERVER_PUBLIC_KEY: ret = conn->protocol_frame_codec->data->m.set_client_option(conn->protocol_frame_codec, option, value); diff --git a/ext/mysqlnd/mysqlnd_protocol_frame_codec.c b/ext/mysqlnd/mysqlnd_protocol_frame_codec.c index 6fb3d8ffa9..a5dc1b0108 100644 --- a/ext/mysqlnd/mysqlnd_protocol_frame_codec.c +++ b/ext/mysqlnd/mysqlnd_protocol_frame_codec.c @@ -430,6 +430,19 @@ MYSQLND_METHOD(mysqlnd_pfc, set_client_option)(MYSQLND_PFC * const pfc, enum_mys } pfc->data->sha256_server_public_key = value? mnd_pestrdup(value, pers) : NULL; break; + case MYSQLND_OPT_NET_CMD_BUFFER_SIZE: + DBG_INF("MYSQLND_OPT_NET_CMD_BUFFER_SIZE"); + if (*(unsigned int*) value < MYSQLND_NET_CMD_BUFFER_MIN_SIZE) { + DBG_RETURN(FAIL); + } + pfc->cmd_buffer.length = *(unsigned int*) value; + DBG_INF_FMT("new_length="MYSQLND_SZ_T_SPEC, pfc->cmd_buffer.length); + if (!pfc->cmd_buffer.buffer) { + pfc->cmd_buffer.buffer = mnd_pemalloc(pfc->cmd_buffer.length, pfc->persistent); + } else { + pfc->cmd_buffer.buffer = mnd_perealloc(pfc->cmd_buffer.buffer, pfc->cmd_buffer.length, pfc->persistent); + } + break; } default: DBG_RETURN(FAIL); @@ -464,7 +477,13 @@ MYSQLND_METHOD(mysqlnd_pfc, free_contents)(MYSQLND_PFC * pfc) static enum_func_status MYSQLND_METHOD(mysqlnd_pfc, init)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) { - return PASS; + unsigned int buf_size; + DBG_ENTER("mysqlnd_pfc::init"); + + buf_size = MYSQLND_G(net_cmd_buffer_size); /* this is long, cast to unsigned int*/ + pfc->data->m.set_client_option(pfc, MYSQLND_OPT_NET_CMD_BUFFER_SIZE, (char *) &buf_size); + + DBG_RETURN(PASS); } /* }}} */ @@ -477,6 +496,12 @@ MYSQLND_METHOD(mysqlnd_pfc, dtor)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const if (pfc) { pfc->data->m.free_contents(pfc); + if (pfc->cmd_buffer.buffer) { + DBG_INF("Freeing cmd buffer"); + mnd_pefree(pfc->cmd_buffer.buffer, pfc->persistent); + pfc->cmd_buffer.buffer = NULL; + } + mnd_pefree(pfc->data, pfc->data->persistent); mnd_pefree(pfc, pfc->persistent); } diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index 0a0745d536..fb42d0a0cd 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -835,9 +835,6 @@ struct st_mysqlnd_vio_data struct st_mysqlnd_vio { - /* cmd buffer */ - MYSQLND_CMD_BUFFER cmd_buffer; - struct st_mysqlnd_vio_data * data; zend_bool persistent; @@ -1130,6 +1127,8 @@ struct st_mysqlnd_protocol_frame_codec_data struct st_mysqlnd_protocol_frame_codec { + MYSQLND_CMD_BUFFER cmd_buffer; + struct st_mysqlnd_protocol_frame_codec_data * data; zend_bool persistent; diff --git a/ext/mysqlnd/mysqlnd_vio.c b/ext/mysqlnd/mysqlnd_vio.c index 1fb8dcd178..1d9b00c337 100644 --- a/ext/mysqlnd/mysqlnd_vio.c +++ b/ext/mysqlnd/mysqlnd_vio.c @@ -337,19 +337,6 @@ MYSQLND_METHOD(mysqlnd_vio, set_client_option)(MYSQLND_VIO * const net, enum_mys DBG_ENTER("mysqlnd_vio::set_client_option"); DBG_INF_FMT("option=%u", option); switch (option) { - case MYSQLND_OPT_NET_CMD_BUFFER_SIZE: - DBG_INF("MYSQLND_OPT_NET_CMD_BUFFER_SIZE"); - if (*(unsigned int*) value < MYSQLND_NET_CMD_BUFFER_MIN_SIZE) { - DBG_RETURN(FAIL); - } - net->cmd_buffer.length = *(unsigned int*) value; - DBG_INF_FMT("new_length="MYSQLND_SZ_T_SPEC, net->cmd_buffer.length); - if (!net->cmd_buffer.buffer) { - net->cmd_buffer.buffer = mnd_pemalloc(net->cmd_buffer.length, net->persistent); - } else { - net->cmd_buffer.buffer = mnd_perealloc(net->cmd_buffer.buffer, net->cmd_buffer.length, net->persistent); - } - break; case MYSQLND_OPT_NET_READ_BUFFER_SIZE: DBG_INF("MYSQLND_OPT_NET_READ_BUFFER_SIZE"); net->data->options.net_read_buffer_size = *(unsigned int*) value; @@ -704,9 +691,6 @@ MYSQLND_METHOD(mysqlnd_vio, init)(MYSQLND_VIO * const net, MYSQLND_STATS * const unsigned int buf_size; DBG_ENTER("mysqlnd_vio::init"); - buf_size = MYSQLND_G(net_cmd_buffer_size); /* this is long, cast to unsigned int*/ - net->data->m.set_client_option(net, MYSQLND_OPT_NET_CMD_BUFFER_SIZE, (char *) &buf_size); - buf_size = MYSQLND_G(net_read_buffer_size); /* this is long, cast to unsigned int*/ net->data->m.set_client_option(net, MYSQLND_OPT_NET_READ_BUFFER_SIZE, (char *)&buf_size); @@ -727,12 +711,6 @@ MYSQLND_METHOD(mysqlnd_vio, dtor)(MYSQLND_VIO * const vio, MYSQLND_STATS * const vio->data->m.free_contents(vio); vio->data->m.close_stream(vio, stats, error_info); - if (vio->cmd_buffer.buffer) { - DBG_INF("Freeing cmd buffer"); - mnd_pefree(vio->cmd_buffer.buffer, vio->persistent); - vio->cmd_buffer.buffer = NULL; - } - mnd_pefree(vio->data, vio->data->persistent); mnd_pefree(vio, vio->persistent); } diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index ca7c19ede8..c671dc8a57 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -666,8 +666,8 @@ php_mysqlnd_auth_response_read(void * _packet) MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; zend_uchar local_buf[AUTH_RESP_BUFFER_SIZE]; - size_t buf_len = vio->cmd_buffer.buffer? vio->cmd_buffer.length: AUTH_RESP_BUFFER_SIZE; - zend_uchar *buf = vio->cmd_buffer.buffer? (zend_uchar *) vio->cmd_buffer.buffer : local_buf; + size_t buf_len = pfc->cmd_buffer.buffer? pfc->cmd_buffer.length: AUTH_RESP_BUFFER_SIZE; + zend_uchar *buf = pfc->cmd_buffer.buffer? (zend_uchar *) pfc->cmd_buffer.buffer : local_buf; const zend_uchar * p = buf; const zend_uchar * const begin = buf; @@ -792,7 +792,7 @@ php_mysqlnd_change_auth_response_write(void * _packet) MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; - zend_uchar * buffer = vio->cmd_buffer.length >= packet->auth_data_len? vio->cmd_buffer.buffer : mnd_emalloc(packet->auth_data_len); + zend_uchar * buffer = pfc->cmd_buffer.length >= packet->auth_data_len? pfc->cmd_buffer.buffer : mnd_emalloc(packet->auth_data_len); zend_uchar * p = buffer + MYSQLND_HEADER_SIZE; /* start after the header */ DBG_ENTER("php_mysqlnd_change_auth_response_write"); @@ -804,7 +804,7 @@ php_mysqlnd_change_auth_response_write(void * _packet) { size_t sent = pfc->data->m.send(pfc, vio, buffer, p - buffer - MYSQLND_HEADER_SIZE, stats, error_info); - if (buffer != vio->cmd_buffer.buffer) { + if (buffer != pfc->cmd_buffer.buffer) { mnd_efree(buffer); } if (!sent) { @@ -841,8 +841,8 @@ php_mysqlnd_ok_read(void * _packet) MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; zend_uchar local_buf[OK_BUFFER_SIZE]; - size_t buf_len = vio->cmd_buffer.buffer? vio->cmd_buffer.length : OK_BUFFER_SIZE; - zend_uchar * buf = vio->cmd_buffer.buffer? (zend_uchar *) vio->cmd_buffer.buffer : local_buf; + size_t buf_len = pfc->cmd_buffer.buffer? pfc->cmd_buffer.length : OK_BUFFER_SIZE; + zend_uchar * buf = pfc->cmd_buffer.buffer? (zend_uchar *) pfc->cmd_buffer.buffer : local_buf; const zend_uchar * p = buf; const zend_uchar * const begin = buf; zend_ulong net_len; @@ -938,8 +938,8 @@ php_mysqlnd_eof_read(void * _packet) MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; - size_t buf_len = vio->cmd_buffer.length; - zend_uchar * buf = (zend_uchar *) vio->cmd_buffer.buffer; + size_t buf_len = pfc->cmd_buffer.length; + zend_uchar * buf = (zend_uchar *) pfc->cmd_buffer.buffer; const zend_uchar * p = buf; const zend_uchar * const begin = buf; @@ -1045,7 +1045,7 @@ size_t php_mysqlnd_cmd_write(void * _packet) } else { size_t tmp_len = packet->argument.l + 1 + MYSQLND_HEADER_SIZE; zend_uchar *tmp, *p; - tmp = (tmp_len > vio->cmd_buffer.length)? mnd_emalloc(tmp_len):vio->cmd_buffer.buffer; + tmp = (tmp_len > pfc->cmd_buffer.length)? mnd_emalloc(tmp_len):pfc->cmd_buffer.buffer; if (!tmp) { goto end; } @@ -1057,7 +1057,7 @@ size_t php_mysqlnd_cmd_write(void * _packet) memcpy(p, packet->argument.s, packet->argument.l); sent = pfc->data->m.send(pfc, vio, tmp, tmp_len - MYSQLND_HEADER_SIZE, stats, error_info); - if (tmp != vio->cmd_buffer.buffer) { + if (tmp != pfc->cmd_buffer.buffer) { MYSQLND_INC_CONN_STATISTIC(stats, STAT_CMD_BUFFER_TOO_SMALL); mnd_efree(tmp); } @@ -1098,8 +1098,8 @@ php_mysqlnd_rset_header_read(void * _packet) MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; enum_func_status ret = PASS; - size_t buf_len = vio->cmd_buffer.length; - zend_uchar * buf = (zend_uchar *) vio->cmd_buffer.buffer; + size_t buf_len = pfc->cmd_buffer.length; + zend_uchar * buf = (zend_uchar *) pfc->cmd_buffer.buffer; const zend_uchar * p = buf; const zend_uchar * const begin = buf; size_t len; @@ -1243,8 +1243,8 @@ php_mysqlnd_rset_field_read(void * _packet) MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; - size_t buf_len = vio->cmd_buffer.length, total_len = 0; - zend_uchar * buf = (zend_uchar *) vio->cmd_buffer.buffer; + size_t buf_len = pfc->cmd_buffer.length, total_len = 0; + zend_uchar * buf = (zend_uchar *) pfc->cmd_buffer.buffer; const zend_uchar * p = buf; const zend_uchar * const begin = buf; char *root_ptr; @@ -1944,8 +1944,8 @@ php_mysqlnd_stats_read(void * _packet) MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; - size_t buf_len = vio->cmd_buffer.length; - zend_uchar *buf = (zend_uchar *) vio->cmd_buffer.buffer; + size_t buf_len = pfc->cmd_buffer.length; + zend_uchar *buf = (zend_uchar *) pfc->cmd_buffer.buffer; DBG_ENTER("php_mysqlnd_stats_read"); @@ -1994,8 +1994,8 @@ php_mysqlnd_prepare_read(void * _packet) MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; /* In case of an error, we should have place to put it */ - size_t buf_len = vio->cmd_buffer.length; - zend_uchar *buf = (zend_uchar *) vio->cmd_buffer.buffer; + size_t buf_len = pfc->cmd_buffer.length; + zend_uchar *buf = (zend_uchar *) pfc->cmd_buffer.buffer; zend_uchar *p = buf; const zend_uchar * const begin = buf; unsigned int data_size; @@ -2089,8 +2089,8 @@ php_mysqlnd_chg_user_read(void * _packet) MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; /* There could be an error message */ - size_t buf_len = vio->cmd_buffer.length; - zend_uchar *buf = (zend_uchar *) vio->cmd_buffer.buffer; + size_t buf_len = pfc->cmd_buffer.length; + zend_uchar *buf = (zend_uchar *) pfc->cmd_buffer.buffer; zend_uchar *p = buf; const zend_uchar * const begin = buf; |
