[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