From 0daf86afeaba91f6fd8b4dbacbf98235c155e741 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sun, 10 Nov 2019 20:17:10 +0100 Subject: fix single tsd bumpptr alloc --- src/bump_alloc.h | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) (limited to 'src/bump_alloc.h') diff --git a/src/bump_alloc.h b/src/bump_alloc.h index bc9cbac..08f5786 100644 --- a/src/bump_alloc.h +++ b/src/bump_alloc.h @@ -1,6 +1,7 @@ #include -#include /* NULL, size_t */ -#include /* uintptr_t */ +#include /* NULL, size_t */ +#include /* uintptr_t */ +#include /* mmap */ #ifndef MEMSIZE #define MEMSIZE 1024*4*1024*1024l @@ -12,36 +13,32 @@ extern "C" { #endif -typedef struct { - uintptr_t end = 0; - uintptr_t ptr = 0; +typedef struct bumpptr { + uintptr_t end; + uintptr_t ptr; } bumpptr_t; __thread bumpptr_t* tsd = NULL; -inline void init_tsd() { - void* mem_start = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); - if(mem_start == MAP_FAILED) { - perror("mmap"); - return NULL; - } - tsd = (bumpptr_t*)mem_start; - tsd->ptr = (uintptr_t)mem_start + sizeof(bumpptr_t); - tsd->end = (uintptr_t)mem_start + MEMSIZE; -} - inline void* bump_up(size_t size, size_t align) { assert(align % 2 == 0); if (unlikely(tsd == NULL)) { - init_tsd(); + void* mem_start = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + if(mem_start == MAP_FAILED) { + perror("mmap"); + return NULL; + } + tsd = (bumpptr_t*)mem_start; + tsd->ptr = (uintptr_t)mem_start + sizeof(bumpptr_t); + tsd->end = (uintptr_t)mem_start + MEMSIZE; } // align ptr; uintptr_t aligned = (tsd->ptr + align - 1) & ~(align - 1); uintptr_t new_ptr = aligned + size; - if (new_ptr > mem_end) + if (new_ptr > tsd->end) return NULL; else { tsd->ptr = new_ptr; -- cgit v1.2.3