diff options
author | Dmitry Stogov <dmitry@zend.com> | 2017-11-15 02:13:16 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2017-11-15 02:13:16 +0300 |
commit | e4a7d31b092d63030a12c793276f7e1a42d05456 (patch) | |
tree | 41e015ee9b7006845832c3ecae6f81ef72a48b4f | |
parent | e176e2d0ef2906c7ea3bf9d5e551e15f3a38ddb1 (diff) | |
download | php-git-e4a7d31b092d63030a12c793276f7e1a42d05456.tar.gz |
Merged allocations
-rw-r--r-- | ext/mysqlnd/mysqlnd_driver.c | 36 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_protocol_frame_codec.c | 1 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_vio.c | 1 |
3 files changed, 8 insertions, 30 deletions
diff --git a/ext/mysqlnd/mysqlnd_driver.c b/ext/mysqlnd/mysqlnd_driver.c index 73eca0ec3c..44efad4423 100644 --- a/ext/mysqlnd/mysqlnd_driver.c +++ b/ext/mysqlnd/mysqlnd_driver.c @@ -245,15 +245,14 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA static MYSQLND_PFC * MYSQLND_METHOD(mysqlnd_object_factory, get_pfc)(const zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) { - size_t pfc_alloc_size = sizeof(MYSQLND_PFC) + mysqlnd_plugin_count() * sizeof(void *); + size_t pfc_alloc_size = ZEND_MM_ALIGNED_SIZE(sizeof(MYSQLND_PFC) + mysqlnd_plugin_count() * sizeof(void *)); size_t pfc_data_alloc_size = sizeof(MYSQLND_PFC_DATA) + mysqlnd_plugin_count() * sizeof(void *); - MYSQLND_PFC * pfc = mnd_pecalloc(1, pfc_alloc_size, persistent); - MYSQLND_PFC_DATA * pfc_data = mnd_pecalloc(1, pfc_data_alloc_size, persistent); + MYSQLND_PFC * pfc = mnd_pecalloc(1, pfc_alloc_size + pfc_data_alloc_size, persistent); DBG_ENTER("mysqlnd_object_factory::get_pfc"); DBG_INF_FMT("persistent=%u", persistent); - if (pfc && pfc_data) { - pfc->data = pfc_data; + if (pfc) { + pfc->data = (MYSQLND_PFC_DATA*)((char*)pfc + pfc_alloc_size); pfc->persistent = pfc->data->persistent = persistent; pfc->data->m = *mysqlnd_pfc_get_methods(); @@ -261,15 +260,6 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_pfc)(const zend_bool persistent, MYSQ pfc->data->m.dtor(pfc, stats, error_info); pfc = NULL; } - } else { - if (pfc_data) { - mnd_pefree(pfc_data, persistent); - pfc_data = NULL; - } - if (pfc) { - mnd_pefree(pfc, persistent); - pfc = NULL; - } } DBG_RETURN(pfc); } @@ -280,15 +270,14 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_pfc)(const zend_bool persistent, MYSQ static MYSQLND_VIO * MYSQLND_METHOD(mysqlnd_object_factory, get_vio)(const 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_alloc_size = ZEND_MM_ALIGNED_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); + MYSQLND_VIO * vio = mnd_pecalloc(1, vio_alloc_size + 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; + if (vio) { + vio->data = (MYSQLND_VIO_DATA*)((char*)vio + vio_alloc_size); vio->persistent = vio->data->persistent = persistent; vio->data->m = *mysqlnd_vio_get_methods(); @@ -296,15 +285,6 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_vio)(const zend_bool persistent, MYSQ 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); } diff --git a/ext/mysqlnd/mysqlnd_protocol_frame_codec.c b/ext/mysqlnd/mysqlnd_protocol_frame_codec.c index f8cdcf751c..0e4618e175 100644 --- a/ext/mysqlnd/mysqlnd_protocol_frame_codec.c +++ b/ext/mysqlnd/mysqlnd_protocol_frame_codec.c @@ -441,7 +441,6 @@ MYSQLND_METHOD(mysqlnd_pfc, dtor)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const pfc->cmd_buffer.buffer = NULL; } - mnd_pefree(pfc->data, pfc->data->persistent); mnd_pefree(pfc, pfc->persistent); } DBG_VOID_RETURN; diff --git a/ext/mysqlnd/mysqlnd_vio.c b/ext/mysqlnd/mysqlnd_vio.c index ef097c9461..b166162c6b 100644 --- a/ext/mysqlnd/mysqlnd_vio.c +++ b/ext/mysqlnd/mysqlnd_vio.c @@ -692,7 +692,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); - mnd_pefree(vio->data, vio->data->persistent); mnd_pefree(vio, vio->persistent); } DBG_VOID_RETURN; |