ralloc: remove memset from ralloc_size
[mesa.git] / src / util / ralloc.c
index 6d4032bd4f673b85fb35755cfe2a2714b36f404c..b202753e15fe3477e1752fa01cdf2f848c9faa7e 100644 (file)
@@ -110,13 +110,24 @@ ralloc_context(const void *ctx)
 void *
 ralloc_size(const void *ctx, size_t size)
 {
-   void *block = calloc(1, size + sizeof(ralloc_header));
+   void *block = malloc(size + sizeof(ralloc_header));
    ralloc_header *info;
    ralloc_header *parent;
 
    if (unlikely(block == NULL))
       return NULL;
+
    info = (ralloc_header *) block;
+   /* measurements have shown that calloc is slower (because of
+    * the multiplication overflow checking?), so clear things
+    * manually
+    */
+   info->parent = NULL;
+   info->child = NULL;
+   info->prev = NULL;
+   info->next = NULL;
+   info->destructor = NULL;
+
    parent = ctx != NULL ? get_header(ctx) : NULL;
 
    add_child(parent, info);
@@ -132,8 +143,10 @@ void *
 rzalloc_size(const void *ctx, size_t size)
 {
    void *ptr = ralloc_size(ctx, size);
-   if (likely(ptr != NULL))
+
+   if (likely(ptr))
       memset(ptr, 0, size);
+
    return ptr;
 }