#include "mysqlnd_debug.h"
#include "mysqlnd_priv.h"
-/* {{{ mysqlnd_mempool_free_chunk */
-static void
-mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL * pool, void * ptr)
-{
- DBG_ENTER("mysqlnd_mempool_free_chunk");
- /* Try to back-off and guess if this is the last block allocated */
-#ifndef ZEND_TRACK_ARENA_ALLOC
- if (ptr == pool->last) {
- /*
- This was the last allocation. Lucky us, we can free
- a bit of memory from the pool. Next time we will return from the same ptr.
- */
- pool->arena->ptr = (char*)ptr;
- pool->last = NULL;
- }
-#endif
- DBG_VOID_RETURN;
-}
-/* }}} */
-
-
/* {{{ mysqlnd_mempool_get_chunk */
static void *
mysqlnd_mempool_get_chunk(MYSQLND_MEMORY_POOL * pool, size_t size)
{
- void *ptr = NULL;
DBG_ENTER("mysqlnd_mempool_get_chunk");
-
- ptr = zend_arena_alloc(&pool->arena, size);
- pool->last = ptr;
-
- DBG_RETURN(ptr);
+ DBG_RETURN(zend_arena_alloc(&pool->arena, size));
}
/* }}} */
arena = zend_arena_create(MAX(arena_size, ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena))));
ret = zend_arena_alloc(&arena, sizeof(MYSQLND_MEMORY_POOL));
ret->arena = arena;
- ret->last = NULL;
ret->checkpoint = NULL;
ret->get_chunk = mysqlnd_mempool_get_chunk;
- ret->free_chunk = mysqlnd_mempool_free_chunk;
DBG_RETURN(ret);
}
/* }}} */
#endif
if (pool->checkpoint) {
zend_arena_release(&pool->arena, pool->checkpoint);
- pool->last = NULL;
pool->checkpoint = NULL;
}
DBG_VOID_RETURN;
set_packet_error(error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
}
}
- if (ret == FAIL && buffer->ptr) {
- pool->free_chunk(pool, buffer->ptr);
- buffer->ptr = NULL;
- }
DBG_RETURN(ret);
}
/* }}} */
/* }}} */
-/* {{{ php_mysqlnd_rowp_free_mem */
-static void
-php_mysqlnd_rowp_free_mem(void * _packet)
-{
- MYSQLND_PACKET_ROW *p;
-
- DBG_ENTER("php_mysqlnd_rowp_free_mem");
- p = (MYSQLND_PACKET_ROW *) _packet;
- if (p->row_buffer.ptr) {
- p->result_set_memory_pool->free_chunk(p->result_set_memory_pool, p->row_buffer.ptr);
- p->row_buffer.ptr = NULL;
- }
- DBG_VOID_RETURN;
-}
-/* }}} */
-
-
/* {{{ php_mysqlnd_stats_read */
static enum_func_status
php_mysqlnd_stats_read(MYSQLND_CONN_DATA * conn, void * _packet)
{
php_mysqlnd_rowp_read, /* read */
NULL, /* write */
- php_mysqlnd_rowp_free_mem,
+ NULL,
}, /* PROT_ROW_PACKET */
{
php_mysqlnd_stats_read, /* read */