[vlc-devel] commit: Revert "Remove block_Realloc() shrinking behavior" ( Rémi Denis-Courmont )

git version control git at videolan.org
Tue Sep 29 21:37:07 CEST 2009


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Sep 29 22:36:42 2009 +0300| [edb4208e18b4ae754ad7aa06e7cc01575aa88863] | committer: Rémi Denis-Courmont 

Revert "Remove block_Realloc() shrinking behavior"

This reverts commit fd4cb4889d55be7d30e3d85cfb406b2814c1655e.

We don't need this commit if we don't use posix_memalign().

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=edb4208e18b4ae754ad7aa06e7cc01575aa88863
---

 src/misc/block.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/src/misc/block.c b/src/misc/block.c
index ecc0c58..77800d6 100644
--- a/src/misc/block.c
+++ b/src/misc/block.c
@@ -93,6 +93,8 @@ static void BlockMetaCopy( block_t *restrict out, const block_t *in )
 #define BLOCK_ALIGN        16
 /* Initial reserved header and footer size (must be multiple of alignment) */
 #define BLOCK_PADDING      32
+/* Maximum size of reserved footer before we release with realloc() */
+#define BLOCK_WASTE_SIZE   2048
 
 block_t *block_Alloc( size_t i_size )
 {
@@ -225,6 +227,23 @@ 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;
+        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 */
 




More information about the vlc-devel mailing list