diff options
author | Andrey Hristov <andrey@php.net> | 2015-11-09 14:56:16 +0100 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2015-11-12 16:19:16 +0100 |
commit | e9f3139f438ef712d82b69984a65da4230fdfeb2 (patch) | |
tree | b3031ab3ed85de79ea91eb018740ca4d4104b7f1 /ext/mysqlnd/mysqlnd_driver.c | |
parent | a990573752af7e0743ed4233ae38cd47b3c94fd5 (diff) | |
download | php-git-e9f3139f438ef712d82b69984a65da4230fdfeb2.tar.gz |
MNDR:
- split MYSQLND_NET into MYSQLND_NET and MYSQLND_VIO
MYSQLND_NET is above MYSQLND_VIO. _NET takes care of protocol packet
counting (even with compressed), while VIO is just about the network
(or in case of windows, non-network, but PIPE) transport.
Diffstat (limited to 'ext/mysqlnd/mysqlnd_driver.c')
-rw-r--r-- | ext/mysqlnd/mysqlnd_driver.c | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/ext/mysqlnd/mysqlnd_driver.c b/ext/mysqlnd/mysqlnd_driver.c index cda731b934..ed4506322e 100644 --- a/ext/mysqlnd/mysqlnd_driver.c +++ b/ext/mysqlnd/mysqlnd_driver.c @@ -140,6 +140,7 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_connection)(struct st_mysqlnd_object_ mysqlnd_stats_init(&data->stats, STAT_LAST, persistent); data->net = mysqlnd_net_init(persistent, data->stats, data->error_info); + data->vio = mysqlnd_vio_init(persistent, data->stats, data->error_info); data->payload_decoder_factory = mysqlnd_protocol_payload_decoder_factory_init(data, persistent); data->command_factory = mysqlnd_command_factory_get(); @@ -241,16 +242,16 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA /* }}} */ -/* {{{ mysqlnd_object_factory::get_io_channel */ -PHPAPI MYSQLND_NET * -MYSQLND_METHOD(mysqlnd_object_factory, get_io_channel)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) +/* {{{ mysqlnd_object_factory::get_net */ +static MYSQLND_NET * +MYSQLND_METHOD(mysqlnd_object_factory, get_net)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) { size_t net_alloc_size = sizeof(MYSQLND_NET) + mysqlnd_plugin_count() * sizeof(void *); size_t net_data_alloc_size = sizeof(MYSQLND_NET_DATA) + mysqlnd_plugin_count() * sizeof(void *); MYSQLND_NET * net = mnd_pecalloc(1, net_alloc_size, persistent); MYSQLND_NET_DATA * net_data = mnd_pecalloc(1, net_data_alloc_size, persistent); - DBG_ENTER("mysqlnd_object_factory::get_io_channel"); + DBG_ENTER("mysqlnd_object_factory::get_net"); DBG_INF_FMT("persistent=%u", persistent); if (net && net_data) { net->data = net_data; @@ -276,6 +277,41 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_io_channel)(zend_bool persistent, MYS /* }}} */ +/* {{{ mysqlnd_object_factory::get_vio */ +static MYSQLND_VIO * +MYSQLND_METHOD(mysqlnd_object_factory, get_vio)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) +{ + size_t vio_alloc_size = sizeof(MYSQLND_VIO) + mysqlnd_plugin_count() * sizeof(void *); + size_t vio_data_alloc_size = sizeof(MYSQLND_VIO_DATA) + mysqlnd_plugin_count() * sizeof(void *); + MYSQLND_VIO * vio = mnd_pecalloc(1, vio_alloc_size, persistent); + MYSQLND_VIO_DATA * vio_data = mnd_pecalloc(1, vio_data_alloc_size, persistent); + + DBG_ENTER("mysqlnd_object_factory::get_vio"); + DBG_INF_FMT("persistent=%u", persistent); + if (vio && vio_data) { + vio->data = vio_data; + vio->persistent = vio->data->persistent = persistent; + vio->data->m = *mysqlnd_vio_get_methods(); + + if (PASS != vio->data->m.init(vio, stats, error_info)) { + vio->data->m.dtor(vio, stats, error_info); + vio = NULL; + } + } else { + if (vio_data) { + mnd_pefree(vio_data, persistent); + vio_data = NULL; + } + if (vio) { + mnd_pefree(vio, persistent); + vio = NULL; + } + } + DBG_RETURN(vio); +} +/* }}} */ + + /* {{{ mysqlnd_object_factory::get_protocol_payload_decoder_factory */ static MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * MYSQLND_METHOD(mysqlnd_object_factory, get_protocol_payload_decoder_factory)(MYSQLND_CONN_DATA * conn, zend_bool persistent) @@ -300,7 +336,8 @@ PHPAPI MYSQLND_CLASS_METHODS_START(mysqlnd_object_factory) MYSQLND_METHOD(mysqlnd_object_factory, get_connection), MYSQLND_METHOD(mysqlnd_object_factory, clone_connection_object), MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement), - MYSQLND_METHOD(mysqlnd_object_factory, get_io_channel), + MYSQLND_METHOD(mysqlnd_object_factory, get_net), + MYSQLND_METHOD(mysqlnd_object_factory, get_vio), MYSQLND_METHOD(mysqlnd_object_factory, get_protocol_payload_decoder_factory) MYSQLND_CLASS_METHODS_END; |