summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_block_alloc.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-11-15 11:33:32 +0300
committerDmitry Stogov <dmitry@zend.com>2017-11-15 11:33:32 +0300
commite2c9dfb5de2a34df980159603f8ebd75ddfce087 (patch)
tree4ad8cddc6f7f76d411a8f02ecfb6e1cca89d97a2 /ext/mysqlnd/mysqlnd_block_alloc.c
parentde5cc9017efee667f00d11ec6886c45801294a90 (diff)
downloadphp-git-e2c9dfb5de2a34df980159603f8ebd75ddfce087.tar.gz
Cleanup. Make difference between MYSQLND_ROW_BUFFER and MYSQLND_MEMORY_POOL_CHUNK (the last one is completely removed).
Diffstat (limited to 'ext/mysqlnd/mysqlnd_block_alloc.c')
-rw-r--r--ext/mysqlnd/mysqlnd_block_alloc.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/ext/mysqlnd/mysqlnd_block_alloc.c b/ext/mysqlnd/mysqlnd_block_alloc.c
index 2ca242d0cf..db183a4fb3 100644
--- a/ext/mysqlnd/mysqlnd_block_alloc.c
+++ b/ext/mysqlnd/mysqlnd_block_alloc.c
@@ -78,16 +78,17 @@ static zend_always_inline void* mysqlnd_arena_alloc(zend_arena **arena_ptr, size
/* {{{ mysqlnd_mempool_free_chunk */
static void
-mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL * pool, MYSQLND_MEMORY_POOL_CHUNK * chunk)
+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 */
- if ((char*)chunk == (char*)pool->arena->ptr - ZEND_MM_ALIGNED_SIZE(sizeof(MYSQLND_MEMORY_POOL_CHUNK) + chunk->size)) {
+ 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*)chunk;
+ pool->arena->ptr = (char*)ptr;
+ pool->last = NULL;
}
DBG_VOID_RETURN;
}
@@ -95,41 +96,40 @@ mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL * pool, MYSQLND_MEMORY_POOL_CHUNK
/* {{{ mysqlnd_mempool_resize_chunk */
-static MYSQLND_MEMORY_POOL_CHUNK *
-mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL * pool, MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size)
+static void *
+mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL * pool, void * ptr, size_t old_size, size_t size)
{
DBG_ENTER("mysqlnd_mempool_resize_chunk");
/* Try to back-off and guess if this is the last block allocated */
- if (((char*)chunk == (char*)pool->arena->ptr - ZEND_MM_ALIGNED_SIZE(sizeof(MYSQLND_MEMORY_POOL_CHUNK) + chunk->size))
- && (ZEND_MM_ALIGNED_SIZE(sizeof(MYSQLND_MEMORY_POOL_CHUNK) + size) <= ((char*)pool->arena->end - (char*)chunk))) {
+ if (ptr == pool->last
+ && (ZEND_MM_ALIGNED_SIZE(size) <= ((char*)pool->arena->end - (char*)ptr))) {
/*
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*)chunk + ZEND_MM_ALIGNED_SIZE(sizeof(MYSQLND_MEMORY_POOL_CHUNK) + size);
+ pool->arena->ptr = (char*)ptr + ZEND_MM_ALIGNED_SIZE(size);
} else {
- MYSQLND_MEMORY_POOL_CHUNK *new_chunk = mysqlnd_arena_alloc(&pool->arena, sizeof(MYSQLND_MEMORY_POOL_CHUNK) + size);
- memcpy(new_chunk, chunk, sizeof(MYSQLND_MEMORY_POOL_CHUNK) + MIN(size, chunk->size));
- chunk = new_chunk;
+ void *new_ptr = mysqlnd_arena_alloc(&pool->arena, size);
+ memcpy(new_ptr, ptr, MIN(old_size, size));
+ pool->last = ptr = new_ptr;
}
- chunk->size = size;
- DBG_RETURN(chunk);
+ DBG_RETURN(ptr);
}
/* }}} */
/* {{{ mysqlnd_mempool_get_chunk */
-static MYSQLND_MEMORY_POOL_CHUNK *
-mysqlnd_mempool_get_chunk(MYSQLND_MEMORY_POOL * pool, unsigned int size)
+static void *
+mysqlnd_mempool_get_chunk(MYSQLND_MEMORY_POOL * pool, size_t size)
{
- MYSQLND_MEMORY_POOL_CHUNK *chunk = NULL;
+ void *ptr = NULL;
DBG_ENTER("mysqlnd_mempool_get_chunk");
- chunk = mysqlnd_arena_alloc(&pool->arena, sizeof(MYSQLND_MEMORY_POOL_CHUNK) + size);
- chunk->size = size;
+ ptr = mysqlnd_arena_alloc(&pool->arena, size);
+ pool->last = ptr;
- DBG_RETURN(chunk);
+ DBG_RETURN(ptr);
}
/* }}} */