summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/mysqlnd/mysqlnd_block_alloc.c3
-rw-r--r--ext/mysqlnd/mysqlnd_result.c26
2 files changed, 14 insertions, 15 deletions
diff --git a/ext/mysqlnd/mysqlnd_block_alloc.c b/ext/mysqlnd/mysqlnd_block_alloc.c
index 7ee952d1c8..cb785238c7 100644
--- a/ext/mysqlnd/mysqlnd_block_alloc.c
+++ b/ext/mysqlnd/mysqlnd_block_alloc.c
@@ -134,6 +134,9 @@ PHPAPI void
mysqlnd_mempool_restore_state(MYSQLND_MEMORY_POOL * pool)
{
DBG_ENTER("mysqlnd_mempool_restore_state");
+#if ZEND_DEBUG
+ ZEND_ASSERT(pool->checkpoint);
+#endif
if (pool->checkpoint) {
zend_arena_release(&pool->arena, pool->checkpoint);
pool->last = NULL;
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c
index 52258cd140..ba85ef819f 100644
--- a/ext/mysqlnd/mysqlnd_result.c
+++ b/ext/mysqlnd/mysqlnd_result.c
@@ -190,8 +190,6 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, free_result)(MYSQLND_RES_UNBUFFERED *
result->row_packet = NULL;
}
- mysqlnd_mempool_restore_state(result->result_set_memory_pool);
-
DBG_VOID_RETURN;
}
/* }}} */
@@ -261,8 +259,6 @@ MYSQLND_METHOD(mysqlnd_result_buffered, free_result)(MYSQLND_RES_BUFFERED * cons
set->row_buffers = NULL;
}
- mysqlnd_mempool_restore_state(set->result_set_memory_pool);
-
DBG_VOID_RETURN;
}
/* }}} */
@@ -275,6 +271,12 @@ MYSQLND_METHOD(mysqlnd_res, free_result_buffers)(MYSQLND_RES * result)
DBG_ENTER("mysqlnd_res::free_result_buffers");
DBG_INF_FMT("%s", result->unbuf? "unbuffered":(result->stored_data? "buffered":"unknown"));
+ if (result->meta) {
+ ZEND_ASSERT(zend_arena_contains(result->memory_pool->arena, result->meta));
+ result->meta->m->free_metadata(result->meta);
+ result->meta = NULL;
+ }
+
if (result->unbuf) {
result->unbuf->m.free_result(result->unbuf, result->conn? result->conn->stats : NULL);
result->unbuf = NULL;
@@ -283,6 +285,9 @@ MYSQLND_METHOD(mysqlnd_res, free_result_buffers)(MYSQLND_RES * result)
result->stored_data = NULL;
}
+ mysqlnd_mempool_restore_state(result->memory_pool);
+ mysqlnd_mempool_save_state(result->memory_pool);
+
DBG_VOID_RETURN;
}
/* }}} */
@@ -294,12 +299,6 @@ void MYSQLND_METHOD(mysqlnd_res, free_result_contents_internal)(MYSQLND_RES * re
{
DBG_ENTER("mysqlnd_res::free_result_contents_internal");
- if (result->meta) {
- ZEND_ASSERT(zend_arena_contains(result->memory_pool->arena, result->meta));
- result->meta->m->free_metadata(result->meta);
- result->meta = NULL;
- }
-
result->m.free_result_buffers(result);
if (result->conn) {
@@ -1928,6 +1927,8 @@ mysqlnd_result_init(const unsigned int field_count)
ret->field_count = field_count;
ret->m = *mysqlnd_result_get_methods();
+ mysqlnd_mempool_save_state(pool);
+
DBG_RETURN(ret);
}
/* }}} */
@@ -1943,7 +1944,6 @@ mysqlnd_result_unbuffered_init(MYSQLND_RES *result, const unsigned int field_cou
DBG_ENTER("mysqlnd_result_unbuffered_init");
- mysqlnd_mempool_save_state(pool);
ret = pool->get_chunk(pool, alloc_size);
memset(ret, 0, alloc_size);
@@ -1978,12 +1978,10 @@ mysqlnd_result_buffered_zval_init(MYSQLND_RES * result, const unsigned int field
DBG_ENTER("mysqlnd_result_buffered_zval_init");
- mysqlnd_mempool_save_state(pool);
ret = pool->get_chunk(pool, alloc_size);
memset(ret, 0, alloc_size);
if (FAIL == mysqlnd_error_info_init(&ret->error_info, 0)) {
- mysqlnd_mempool_restore_state(pool);
DBG_RETURN(NULL);
}
@@ -2021,12 +2019,10 @@ mysqlnd_result_buffered_c_init(MYSQLND_RES * result, const unsigned int field_co
DBG_ENTER("mysqlnd_result_buffered_c_init");
- mysqlnd_mempool_save_state(pool);
ret = pool->get_chunk(pool, alloc_size);
memset(ret, 0, alloc_size);
if (FAIL == mysqlnd_error_info_init(&ret->error_info, 0)) {
- mysqlnd_mempool_restore_state(pool);
DBG_RETURN(NULL);
}