summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysqlnd/mysqlnd_driver.c')
-rw-r--r--ext/mysqlnd/mysqlnd_driver.c54
1 files changed, 16 insertions, 38 deletions
diff --git a/ext/mysqlnd/mysqlnd_driver.c b/ext/mysqlnd/mysqlnd_driver.c
index 59b1349d63..b61720fe7c 100644
--- a/ext/mysqlnd/mysqlnd_driver.c
+++ b/ext/mysqlnd/mysqlnd_driver.c
@@ -143,9 +143,9 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_connection)(MYSQLND_CLASS_METHODS_TYP
data->protocol_frame_codec = mysqlnd_pfc_init(persistent, factory, data->stats, data->error_info);
data->vio = mysqlnd_vio_init(persistent, factory, data->stats, data->error_info);
data->payload_decoder_factory = mysqlnd_protocol_payload_decoder_factory_init(data, persistent);
- data->command_factory = mysqlnd_command_factory_get();
+ data->run_command = mysqlnd_command_factory_get();
- if (!data->protocol_frame_codec || !data->vio || !data->payload_decoder_factory || !data->command_factory) {
+ if (!data->protocol_frame_codec || !data->vio || !data->payload_decoder_factory || !data->run_command) {
new_object->m->dtor(new_object);
DBG_RETURN(NULL);
}
@@ -186,10 +186,10 @@ MYSQLND_METHOD(mysqlnd_object_factory, clone_connection_object)(MYSQLND * to_be_
/* {{{ mysqlnd_object_factory::get_prepared_statement */
static MYSQLND_STMT *
-MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA * const conn, const zend_bool persistent)
+MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA * const conn)
{
size_t alloc_size = sizeof(MYSQLND_STMT) + mysqlnd_plugin_count() * sizeof(void *);
- MYSQLND_STMT * ret = mnd_pecalloc(1, alloc_size, conn->persistent);
+ MYSQLND_STMT * ret = mnd_ecalloc(1, alloc_size);
MYSQLND_STMT_DATA * stmt = NULL;
DBG_ENTER("mysqlnd_object_factory::get_prepared_statement");
@@ -198,17 +198,15 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA
break;
}
ret->m = mysqlnd_stmt_get_methods();
- ret->persistent = conn->persistent;
- stmt = ret->data = mnd_pecalloc(1, sizeof(MYSQLND_STMT_DATA), persistent);
+ stmt = ret->data = mnd_ecalloc(1, sizeof(MYSQLND_STMT_DATA));
DBG_INF_FMT("stmt=%p", stmt);
if (!stmt) {
break;
}
- stmt->persistent = persistent;
- if (FAIL == mysqlnd_error_info_init(&stmt->error_info_impl, persistent)) {
- break;
+ if (FAIL == mysqlnd_error_info_init(&stmt->error_info_impl, 0)) {
+ break;
}
stmt->error_info = &stmt->error_info_impl;
@@ -216,7 +214,7 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA
stmt->upsert_status = &(stmt->upsert_status_impl);
stmt->state = MYSQLND_STMT_INITTED;
stmt->execute_cmd_buffer.length = 4096;
- stmt->execute_cmd_buffer.buffer = mnd_pemalloc(stmt->execute_cmd_buffer.length, stmt->persistent);
+ stmt->execute_cmd_buffer.buffer = mnd_emalloc(stmt->execute_cmd_buffer.length);
if (!stmt->execute_cmd_buffer.buffer) {
break;
}
@@ -247,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();
@@ -263,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);
}
@@ -282,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();
@@ -298,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);
}