]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: lua: simplify hlua_alloc() to only rely on realloc()
authorWilly Tarreau <w@1wt.eu>
Wed, 2 Dec 2020 11:26:29 +0000 (12:26 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 2 Dec 2020 20:53:16 +0000 (21:53 +0100)
The function really has the semantics of a realloc() except that it
also passes the old size to help with accounting. No need to special
case the free or malloc, realloc does everything we need.

src/hlua.c

index 1829e87b6ecade08590982bb58f2e085b12bfa4a..176e6f78bb6d53dbdd159170225c76cc23d892ad 100644 (file)
@@ -8229,37 +8229,22 @@ int hlua_post_init()
 /* The memory allocator used by the Lua stack. <ud> is a pointer to the
  * allocator's context. <ptr> is the pointer to alloc/free/realloc. <osize>
  * is the previously allocated size or the kind of object in case of a new
- * allocation. <nsize> is the requested new size.
+ * allocation. <nsize> is the requested new size. A new allocation is
+ * indicated by <ptr> being NULL. A free is indicated by <nsize> being
+ * zero.
  */
 static void *hlua_alloc(void *ud, void *ptr, size_t osize, size_t nsize)
 {
        struct hlua_mem_allocator *zone = ud;
 
-       if (nsize == 0) {
-               /* it's a free */
-               if (ptr)
-                       zone->allocated -= osize;
-               free(ptr);
-               return NULL;
-       }
-
-       if (!ptr) {
-               /* it's a new allocation */
-               if (zone->limit && zone->allocated + nsize > zone->limit)
-                       return NULL;
-
-               ptr = malloc(nsize);
-               if (ptr)
-                       zone->allocated += nsize;
-               return ptr;
-       }
+       if (!ptr)
+               osize = 0;
 
-       /* it's a realloc */
        if (zone->limit && zone->allocated + nsize - osize > zone->limit)
                return NULL;
 
        ptr = realloc(ptr, nsize);
-       if (ptr)
+       if (ptr || !nsize)
                zone->allocated += nsize - osize;
        return ptr;
 }