From: jameson.miller81@gmail.com Date: Wed, 21 Mar 2018 16:41:52 GMT Subject: [PATCH 3/3] fast-import: use built-in mem pool Message-ID: <20180321164152.204869-4-jamill@microsoft.com> In-Reply-To: <20180321164152.204869-1-jamill@microsoft.com> From: Jameson Miller Signed-off-by: Jameson Miller --- fast-import.c | 50 +++++++------------------------------------------- 1 file changed, 7 insertions(+), 43 deletions(-) diff --git a/fast-import.c b/fast-import.c index 4e68acc156..126f2da118 100644 --- a/fast-import.c +++ b/fast-import.c @@ -168,6 +168,7 @@ Format of STDIN stream: #include "dir.h" #include "run-command.h" #include "packfile.h" +#include "mem-pool.h" #define PACK_ID_BITS 16 #define MAX_PACK_ID ((1<next_pool) - if ((p->end - p->next_free >= len)) - break; - - if (!p) { - if (len >= (fi_mem_pool_alloc/2)) { - total_allocd += len; - return xmalloc(len); - } - total_allocd += sizeof(struct fi_mem_pool) + fi_mem_pool_alloc; - p = xmalloc(st_add(sizeof(struct fi_mem_pool), fi_mem_pool_alloc)); - p->next_pool = mem_pool; - p->next_free = (char *) p->space; - p->end = p->next_free + fi_mem_pool_alloc; - mem_pool = p; - } - - r = p->next_free; - p->next_free += len; - return r; + return mem_pool_alloc(&mem_pool, len); } static void *pool_calloc(size_t count, size_t size) { - size_t len = count * size; - void *r = pool_alloc(len); - memset(r, 0, len); - return r; + return mem_pool_calloc(&mem_pool, count, size); } static char *pool_strdup(const char *s) @@ -3541,8 +3505,8 @@ int cmd_main(int argc, const char **argv) fprintf(stderr, "Total branches: %10lu (%10lu loads )\n", branch_count, branch_load_count); fprintf(stderr, " marks: %10" PRIuMAX " (%10" PRIuMAX " unique )\n", (((uintmax_t)1) << marks->shift) * 1024, marks_set_count); fprintf(stderr, " atoms: %10u\n", atom_cnt); - fprintf(stderr, "Memory total: %10" PRIuMAX " KiB\n", (total_allocd + alloc_count*sizeof(struct object_entry))/1024); - fprintf(stderr, " pools: %10lu KiB\n", (unsigned long)(total_allocd/1024)); + fprintf(stderr, "Memory total: %10" PRIuMAX " KiB\n", (total_allocd + mem_pool.pool_alloc + alloc_count*sizeof(struct object_entry))/1024); + fprintf(stderr, " pools: %10lu KiB\n", (unsigned long)((total_allocd + mem_pool.pool_alloc) /1024)); fprintf(stderr, " objects: %10" PRIuMAX " KiB\n", (alloc_count*sizeof(struct object_entry))/1024); fprintf(stderr, "---------------------------------------------------------------------\n"); pack_report(); -- 2.14.3