@@ -190,7 +190,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, free_result)(MYSQLND_RES_UNBUFFERED *
190
190
result -> row_packet = NULL ;
191
191
}
192
192
193
- mysqlnd_mempool_destroy (result -> result_set_memory_pool );
193
+ mysqlnd_mempool_restore_state (result -> result_set_memory_pool );
194
194
195
195
DBG_VOID_RETURN ;
196
196
}
@@ -261,7 +261,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered, free_result)(MYSQLND_RES_BUFFERED * cons
261
261
set -> row_buffers = NULL ;
262
262
}
263
263
264
- mysqlnd_mempool_destroy (set -> result_set_memory_pool );
264
+ mysqlnd_mempool_restore_state (set -> result_set_memory_pool );
265
265
266
266
DBG_VOID_RETURN ;
267
267
}
@@ -320,7 +320,7 @@ void MYSQLND_METHOD(mysqlnd_res, free_result_internal)(MYSQLND_RES * result)
320
320
result -> conn = NULL ;
321
321
}
322
322
323
- mnd_efree (result );
323
+ mysqlnd_mempool_destroy (result -> memory_pool );
324
324
325
325
DBG_VOID_RETURN ;
326
326
}
@@ -344,7 +344,7 @@ MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_
344
344
result -> meta = NULL ;
345
345
}
346
346
347
- result -> meta = result -> m .result_meta_init (result -> field_count );
347
+ result -> meta = result -> m .result_meta_init (result , result -> field_count );
348
348
if (!result -> meta ) {
349
349
SET_OOM_ERROR (conn -> error_info );
350
350
DBG_RETURN (FAIL );
@@ -353,7 +353,7 @@ MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_
353
353
/* 1. Read all fields metadata */
354
354
355
355
/* It's safe to reread without freeing */
356
- if (FAIL == result -> meta -> m -> read_metadata (result -> meta , conn )) {
356
+ if (FAIL == result -> meta -> m -> read_metadata (result -> meta , conn , result )) {
357
357
result -> m .free_result_contents (result );
358
358
DBG_RETURN (FAIL );
359
359
}
@@ -514,7 +514,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s)
514
514
if (FAIL == (ret = PACKET_READ (conn , & fields_eof ))) {
515
515
DBG_ERR ("Error occurred while reading the EOF packet" );
516
516
result -> m .free_result_contents (result );
517
- mnd_efree (result );
517
+ mysqlnd_mempool_destroy (result -> memory_pool );
518
518
if (!stmt ) {
519
519
conn -> current_result = NULL ;
520
520
} else {
@@ -906,7 +906,7 @@ MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, const zend_b
906
906
result -> type = MYSQLND_RES_PS_UNBUF ;
907
907
}
908
908
909
- result -> unbuf = mysqlnd_result_unbuffered_init (result -> field_count , ps );
909
+ result -> unbuf = mysqlnd_result_unbuffered_init (result , result -> field_count , ps );
910
910
if (!result -> unbuf ) {
911
911
goto oom ;
912
912
}
@@ -1389,14 +1389,14 @@ MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result,
1389
1389
SET_CONNECTION_STATE (& conn -> state , CONN_FETCHING_DATA );
1390
1390
1391
1391
if (flags & MYSQLND_STORE_NO_COPY ) {
1392
- result -> stored_data = (MYSQLND_RES_BUFFERED * ) mysqlnd_result_buffered_zval_init (result -> field_count , flags & MYSQLND_STORE_PS );
1392
+ result -> stored_data = (MYSQLND_RES_BUFFERED * ) mysqlnd_result_buffered_zval_init (result , result -> field_count , flags & MYSQLND_STORE_PS );
1393
1393
if (!result -> stored_data ) {
1394
1394
SET_OOM_ERROR (conn -> error_info );
1395
1395
DBG_RETURN (NULL );
1396
1396
}
1397
1397
row_buffers = & result -> stored_data -> row_buffers ;
1398
1398
} else if (flags & MYSQLND_STORE_COPY ) {
1399
- result -> stored_data = (MYSQLND_RES_BUFFERED * ) mysqlnd_result_buffered_c_init (result -> field_count , flags & MYSQLND_STORE_PS );
1399
+ result -> stored_data = (MYSQLND_RES_BUFFERED * ) mysqlnd_result_buffered_c_init (result , result -> field_count , flags & MYSQLND_STORE_PS );
1400
1400
if (!result -> stored_data ) {
1401
1401
SET_OOM_ERROR (conn -> error_info );
1402
1402
DBG_RETURN (NULL );
@@ -1886,14 +1886,20 @@ PHPAPI MYSQLND_RES *
1886
1886
mysqlnd_result_init (const unsigned int field_count )
1887
1887
{
1888
1888
const size_t alloc_size = sizeof (MYSQLND_RES ) + mysqlnd_plugin_count () * sizeof (void * );
1889
- MYSQLND_RES * ret = mnd_ecalloc (1 , alloc_size );
1889
+ MYSQLND_MEMORY_POOL * pool ;
1890
+ MYSQLND_RES * ret ;
1890
1891
1891
1892
DBG_ENTER ("mysqlnd_result_init" );
1892
1893
1893
- if (!ret ) {
1894
+ pool = mysqlnd_mempool_create (MYSQLND_G (mempool_default_size ));
1895
+ if (!pool ) {
1894
1896
DBG_RETURN (NULL );
1895
1897
}
1896
1898
1899
+ ret = pool -> get_chunk (pool , alloc_size );
1900
+ memset (ret , 0 , alloc_size );
1901
+
1902
+ ret -> memory_pool = pool ;
1897
1903
ret -> field_count = field_count ;
1898
1904
ret -> m = * mysqlnd_result_get_methods ();
1899
1905
@@ -1904,19 +1910,15 @@ mysqlnd_result_init(const unsigned int field_count)
1904
1910
1905
1911
/* {{{ mysqlnd_result_unbuffered_init */
1906
1912
PHPAPI MYSQLND_RES_UNBUFFERED *
1907
- mysqlnd_result_unbuffered_init (const unsigned int field_count , const zend_bool ps )
1913
+ mysqlnd_result_unbuffered_init (MYSQLND_RES * result , const unsigned int field_count , const zend_bool ps )
1908
1914
{
1909
1915
const size_t alloc_size = sizeof (MYSQLND_RES_UNBUFFERED ) + mysqlnd_plugin_count () * sizeof (void * );
1910
- MYSQLND_MEMORY_POOL * pool ;
1916
+ MYSQLND_MEMORY_POOL * pool = result -> memory_pool ;
1911
1917
MYSQLND_RES_UNBUFFERED * ret ;
1912
1918
1913
1919
DBG_ENTER ("mysqlnd_result_unbuffered_init" );
1914
1920
1915
- pool = mysqlnd_mempool_create (MYSQLND_G (mempool_default_size ));
1916
- if (!pool ) {
1917
- DBG_RETURN (NULL );
1918
- }
1919
-
1921
+ mysqlnd_mempool_save_state (pool );
1920
1922
ret = pool -> get_chunk (pool , alloc_size );
1921
1923
memset (ret , 0 , alloc_size );
1922
1924
@@ -1943,24 +1945,20 @@ mysqlnd_result_unbuffered_init(const unsigned int field_count, const zend_bool p
1943
1945
1944
1946
/* {{{ mysqlnd_result_buffered_zval_init */
1945
1947
PHPAPI MYSQLND_RES_BUFFERED_ZVAL *
1946
- mysqlnd_result_buffered_zval_init (const unsigned int field_count , const zend_bool ps )
1948
+ mysqlnd_result_buffered_zval_init (MYSQLND_RES * result , const unsigned int field_count , const zend_bool ps )
1947
1949
{
1948
1950
const size_t alloc_size = sizeof (MYSQLND_RES_BUFFERED_ZVAL ) + mysqlnd_plugin_count () * sizeof (void * );
1949
- MYSQLND_MEMORY_POOL * pool ;
1951
+ MYSQLND_MEMORY_POOL * pool = result -> memory_pool ;
1950
1952
MYSQLND_RES_BUFFERED_ZVAL * ret ;
1951
1953
1952
1954
DBG_ENTER ("mysqlnd_result_buffered_zval_init" );
1953
1955
1954
- pool = mysqlnd_mempool_create (MYSQLND_G (mempool_default_size ));
1955
- if (!pool ) {
1956
- DBG_RETURN (NULL );
1957
- }
1958
-
1956
+ mysqlnd_mempool_save_state (pool );
1959
1957
ret = pool -> get_chunk (pool , alloc_size );
1960
1958
memset (ret , 0 , alloc_size );
1961
1959
1962
1960
if (FAIL == mysqlnd_error_info_init (& ret -> error_info , 0 )) {
1963
- mysqlnd_mempool_destroy (pool );
1961
+ mysqlnd_mempool_restore_state (pool );
1964
1962
DBG_RETURN (NULL );
1965
1963
}
1966
1964
@@ -1990,24 +1988,20 @@ mysqlnd_result_buffered_zval_init(const unsigned int field_count, const zend_boo
1990
1988
1991
1989
/* {{{ mysqlnd_result_buffered_c_init */
1992
1990
PHPAPI MYSQLND_RES_BUFFERED_C *
1993
- mysqlnd_result_buffered_c_init (const unsigned int field_count , const zend_bool ps )
1991
+ mysqlnd_result_buffered_c_init (MYSQLND_RES * result , const unsigned int field_count , const zend_bool ps )
1994
1992
{
1995
1993
const size_t alloc_size = sizeof (MYSQLND_RES_BUFFERED_C ) + mysqlnd_plugin_count () * sizeof (void * );
1996
- MYSQLND_MEMORY_POOL * pool ;
1994
+ MYSQLND_MEMORY_POOL * pool = result -> memory_pool ;
1997
1995
MYSQLND_RES_BUFFERED_C * ret ;
1998
1996
1999
1997
DBG_ENTER ("mysqlnd_result_buffered_c_init" );
2000
1998
2001
- pool = mysqlnd_mempool_create (MYSQLND_G (mempool_default_size ));
2002
- if (!pool ) {
2003
- DBG_RETURN (NULL );
2004
- }
2005
-
1999
+ mysqlnd_mempool_save_state (pool );
2006
2000
ret = pool -> get_chunk (pool , alloc_size );
2007
2001
memset (ret , 0 , alloc_size );
2008
2002
2009
2003
if (FAIL == mysqlnd_error_info_init (& ret -> error_info , 0 )) {
2010
- mysqlnd_mempool_destroy (pool );
2004
+ mysqlnd_mempool_restore_state (pool );
2011
2005
DBG_RETURN (NULL );
2012
2006
}
2013
2007
0 commit comments