From 7df1a17b30a4e70f924e443237e5120beeab45ef Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 30 Aug 2009 16:12:09 +0300 Subject: [PATCH] block_Realloc: waste handling only if not reallocating --- src/misc/block.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/misc/block.c b/src/misc/block.c index 6cefb243d8..339c5a58ab 100644 --- a/src/misc/block.c +++ b/src/misc/block.c @@ -207,6 +207,24 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body ) block_Release( p_block ); p_block = p_rea; } + else + /* We have a very large reserved footer now? Release some of it. + * XXX it might not preserve the alignment of p_buffer */ + if( p_end - (p_block->p_buffer + i_body) > BLOCK_WASTE_SIZE ) + { + const ptrdiff_t i_prebody = p_block->p_buffer - p_start; + const size_t i_new = requested + 1 * BLOCK_PADDING_SIZE; + block_sys_t *p_new = realloc( p_sys, sizeof (*p_sys) + i_new ); + + if( p_new != NULL ) + { + p_sys = p_new; + p_sys->i_allocated_buffer = i_new; + p_block = &p_sys->self; + p_block->p_buffer = &p_sys->p_allocated_buffer[i_prebody]; + } + } + /* NOTE: p_start and p_end are corrupted from this point */ /* Third, expand payload */ @@ -223,23 +241,6 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body ) /* Expand payload to requested size */ p_block->i_buffer = i_body; - /* We have a very large reserved footer now? Release some of it. - * XXX it might not preserve the alignment of p_buffer */ - if( (p_sys->p_allocated_buffer + p_sys->i_allocated_buffer) - - (p_block->p_buffer + p_block->i_buffer) > BLOCK_WASTE_SIZE ) - { - const ptrdiff_t i_prebody = p_block->p_buffer - p_sys->p_allocated_buffer; - const size_t i_new = i_prebody + p_block->i_buffer + 1 * BLOCK_PADDING_SIZE; - block_sys_t *p_new = realloc( p_sys, sizeof (*p_sys) + i_new ); - - if( p_new != NULL ) - { - p_sys = p_new; - p_sys->i_allocated_buffer = i_new; - p_block = &p_sys->self; - p_block->p_buffer = &p_sys->p_allocated_buffer[i_prebody]; - } - } return p_block; } -- 2.39.2