[vlc-devel] commit: block_Realloc: waste handling only if not reallocating ( Rémi Denis-Courmont )
git version control
git at videolan.org
Sun Aug 30 15:26:48 CEST 2009
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Aug 30 16:12:09 2009 +0300| [7df1a17b30a4e70f924e443237e5120beeab45ef] | committer: Rémi Denis-Courmont
block_Realloc: waste handling only if not reallocating
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7df1a17b30a4e70f924e443237e5120beeab45ef
---
src/misc/block.c | 35 ++++++++++++++++++-----------------
1 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/src/misc/block.c b/src/misc/block.c
index 6cefb24..339c5a5 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;
}
More information about the vlc-devel
mailing list