shithub: libvpx

Download patch

ref: 28c6207bcdf63a35355d302a6e850bacaf204d75
parent: 69c5ba1910f314984fce725ecef4aa3607dba967
author: Urvang Joshi <urvang@google.com>
date: Tue Jul 26 08:02:37 EDT 2016

vpx_realloc correction.

vpx_realloc was allocating 1 byte more than needed every time.
Fixed this, and took this opportunity to do a small refactoring.

Change-Id: I38fcb62b698894acbbab43466c1decd12f906789
(cherry picked from aom: 2a876b4 aom_realloc correction.)

--- a/vpx_mem/vpx_mem.c
+++ b/vpx_mem/vpx_mem.c
@@ -19,6 +19,10 @@
   return ((size_t *)mem) - 1;
 }
 
+static INLINE size_t GetAlignedMallocSize(size_t size, size_t align) {
+  return size + align - 1 + ADDRESS_STORAGE_SIZE;
+}
+
 static INLINE void SetActualMallocAddress(void *const mem,
                                           const void *const malloc_addr) {
   size_t *const malloc_addr_location = GetMallocAddressLocation(mem);
@@ -32,7 +36,8 @@
 
 void *vpx_memalign(size_t align, size_t size) {
   void *x = NULL;
-  void *const addr = malloc(size + align - 1 + ADDRESS_STORAGE_SIZE);
+  const size_t aligned_size = GetAlignedMallocSize(size, align);
+  void *const addr = malloc(aligned_size);
   if (addr) {
     x = align_addr((unsigned char *)addr + ADDRESS_STORAGE_SIZE, (int)align);
     SetActualMallocAddress(x, addr);
@@ -66,8 +71,9 @@
     vpx_free(memblk);
   else {
     void *addr = GetActualMallocAddress(memblk);
+    const size_t aligned_size = GetAlignedMallocSize(size, DEFAULT_ALIGNMENT);
     memblk = NULL;
-    addr = realloc(addr, size + DEFAULT_ALIGNMENT + ADDRESS_STORAGE_SIZE);
+    addr = realloc(addr, aligned_size);
     if (addr) {
       new_addr = align_addr((unsigned char *)addr + ADDRESS_STORAGE_SIZE,
                             DEFAULT_ALIGNMENT);