diff options
Diffstat (limited to 'ext/mysqlnd/mysqlnd_driver.c')
-rw-r--r-- | ext/mysqlnd/mysqlnd_driver.c | 54 |
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); } |