Split jumbo_free and jumbo_realloc into their own functions for readability and

consistency (they are called just once and will be inlined by any reasonable
compiler).

Also add some comments, fix some spacing etc. No functional changes.

svn path=/trunk/; revision=51304
This commit is contained in:
Evan Huus 2013-08-11 22:32:46 +00:00
parent 6eef00ac05
commit dc46cb0f29
1 changed files with 45 additions and 13 deletions

View File

@ -721,6 +721,8 @@ wmem_block_split_used_chunk(wmem_block_allocator_t *allocator,
/* BLOCK HELPERS */
/* Add a block to the allocator's embedded doubly-linked list of OS-level blocks
* that it owns. */
static void
wmem_block_add_to_block_list(wmem_block_allocator_t *allocator,
wmem_block_hdr_t *block)
@ -733,6 +735,8 @@ wmem_block_add_to_block_list(wmem_block_allocator_t *allocator,
allocator->block_list = block;
}
/* Remove a block from the allocator's embedded doubly-linked list of OS-level
* blocks that it owns. */
static void
wmem_block_remove_from_block_list(wmem_block_allocator_t *allocator,
wmem_block_hdr_t *block)
@ -784,7 +788,9 @@ wmem_block_new_block(wmem_block_allocator_t *allocator)
wmem_block_init_block(allocator, block);
}
/* Handles special 'jumbo' allocations that won't fit in a usual block. */
/* JUMBO ALLOCATIONS */
/* Allocates special 'jumbo' blocks for sizes that won't fit normally. */
static void *
wmem_block_alloc_jumbo(wmem_block_allocator_t *allocator, const size_t size)
{
@ -807,7 +813,43 @@ wmem_block_alloc_jumbo(wmem_block_allocator_t *allocator, const size_t size)
return WMEM_CHUNK_TO_DATA(chunk);
}
/* Frees special 'jumbo' blocks of sizes that won't fit normally. */
static void
wmem_block_free_jumbo(wmem_block_allocator_t *allocator,
wmem_block_chunk_t *chunk)
{
wmem_block_hdr_t *block;
block = WMEM_CHUNK_TO_BLOCK(chunk);
wmem_block_remove_from_block_list(allocator, block);
g_free(block);
}
/* Reallocs special 'jumbo' blocks of sizes that won't fit normally. */
static void *
wmem_block_realloc_jumbo(wmem_block_allocator_t *allocator,
wmem_block_chunk_t *chunk,
const size_t size)
{
wmem_block_hdr_t *block;
block = WMEM_CHUNK_TO_BLOCK(chunk);
wmem_block_remove_from_block_list(allocator, block);
block = (wmem_block_hdr_t *) g_realloc(block, size
+ WMEM_BLOCK_HEADER_SIZE
+ WMEM_CHUNK_HEADER_SIZE);
wmem_block_add_to_block_list(allocator, block);
return WMEM_CHUNK_TO_DATA(WMEM_BLOCK_TO_CHUNK(block));
}
/* API */
static void *
wmem_block_alloc(void *private_data, const size_t size)
{
@ -877,10 +919,7 @@ wmem_block_free(void *private_data, void *ptr)
chunk = WMEM_DATA_TO_CHUNK(ptr);
if (chunk->jumbo) {
wmem_block_hdr_t *block;
block = WMEM_CHUNK_TO_BLOCK(chunk);
wmem_block_remove_from_block_list(allocator, block);
g_free(block);
wmem_block_free_jumbo(allocator, chunk);
return;
}
@ -903,14 +942,7 @@ wmem_block_realloc(void *private_data, void *ptr, const size_t size)
chunk = WMEM_DATA_TO_CHUNK(ptr);
if (chunk->jumbo) {
wmem_block_hdr_t *block;
block = WMEM_CHUNK_TO_BLOCK(chunk);
wmem_block_remove_from_block_list(allocator, block);
block = (wmem_block_hdr_t *) g_realloc(block, size
+ WMEM_BLOCK_HEADER_SIZE
+ WMEM_CHUNK_HEADER_SIZE);
wmem_block_add_to_block_list(allocator, block);
return WMEM_CHUNK_TO_DATA(WMEM_BLOCK_TO_CHUNK(block));
return wmem_block_realloc_jumbo(allocator, chunk, size);
}
g_assert(chunk->used);