diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2020-02-25 19:57:29 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2020-02-25 21:14:06 +0100 |
| commit | 48b4057fc950a3d60a8a82fa269dde5d52a2c922 (patch) | |
| tree | 07289a454c3e2a5a14265df2107a49974ba78097 /src/bump_alloc.h | |
| parent | 4d1d605f27e692146a7a40ef293d174db27150f7 (diff) | |
| download | allocbench-48b4057fc950a3d60a8a82fa269dde5d52a2c922.tar.gz allocbench-48b4057fc950a3d60a8a82fa269dde5d52a2c922.zip | |
set errno when bump end is reached
Diffstat (limited to 'src/bump_alloc.h')
| -rw-r--r-- | src/bump_alloc.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/bump_alloc.h b/src/bump_alloc.h index 300feef..6a651a1 100644 --- a/src/bump_alloc.h +++ b/src/bump_alloc.h @@ -1,4 +1,5 @@ #include <assert.h> +#include <errno.h> #include <stddef.h> /* NULL, size_t */ #include <stdint.h> /* uintptr_t */ #include <sys/mman.h> /* mmap */ @@ -24,7 +25,7 @@ static inline void* bump_up(size_t size, size_t align) { assert(align % 2 == 0); if (unlikely(tsd == NULL)) { - void* mem_start = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + void* mem_start = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB, -1, 0); if(mem_start == MAP_FAILED) { perror("mmap"); return NULL; @@ -38,9 +39,10 @@ static inline void* bump_up(size_t size, size_t align) { uintptr_t aligned = (tsd->ptr + align - 1) & ~(align - 1); uintptr_t new_ptr = aligned + size; - if (new_ptr > tsd->end) + if (new_ptr > tsd->end) { + errno = ENOMEM; return NULL; - else { + } else { tsd->ptr = new_ptr; return (void*)aligned; } |
