summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-11-15 02:13:16 +0300
committerDmitry Stogov <dmitry@zend.com>2017-11-15 02:13:16 +0300
commite4a7d31b092d63030a12c793276f7e1a42d05456 (patch)
tree41e015ee9b7006845832c3ecae6f81ef72a48b4f
parente176e2d0ef2906c7ea3bf9d5e551e15f3a38ddb1 (diff)
downloadphp-git-e4a7d31b092d63030a12c793276f7e1a42d05456.tar.gz
Merged allocations
-rw-r--r--ext/mysqlnd/mysqlnd_driver.c36
-rw-r--r--ext/mysqlnd/mysqlnd_protocol_frame_codec.c1
-rw-r--r--ext/mysqlnd/mysqlnd_vio.c1
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;