aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2020-02-25 19:57:29 +0100
committerFlorian Fischer <florian.fl.fischer@fau.de>2020-02-25 21:14:06 +0100
commit48b4057fc950a3d60a8a82fa269dde5d52a2c922 (patch)
tree07289a454c3e2a5a14265df2107a49974ba78097 /src
parent4d1d605f27e692146a7a40ef293d174db27150f7 (diff)
downloadallocbench-48b4057fc950a3d60a8a82fa269dde5d52a2c922.tar.gz
allocbench-48b4057fc950a3d60a8a82fa269dde5d52a2c922.zip
set errno when bump end is reached
Diffstat (limited to 'src')
-rw-r--r--src/bump_alloc.h8
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;
}