]> granicus.if.org Git - php/commitdiff
Merged allocations
authorDmitry Stogov <dmitry@zend.com>
Tue, 14 Nov 2017 23:13:16 +0000 (02:13 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 14 Nov 2017 23:13:16 +0000 (02:13 +0300)
ext/mysqlnd/mysqlnd_driver.c
ext/mysqlnd/mysqlnd_protocol_frame_codec.c
ext/mysqlnd/mysqlnd_vio.c

index 73eca0ec3cbc116616e53626f727e2b7c7a3a4f3..44efad4423a25a718287044b58643443252e37b9 100644 (file)
@@ -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);
 }
index f8cdcf751c016d373a1e1b47e1c9c6e20a301761..0e4618e1759fcc9ca1278f72b2741bac3dbe2ebe 100644 (file)
@@ -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;
index ef097c94611ed1094f12cedb24355d961cb36bd3..b166162c6b47e44400f5e1a86e816ef6d1f2a3de 100644 (file)
@@ -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;