print errors on mem alloc failure
This commit is contained in:
parent
3d7f61362b
commit
d177ea66a8
3 changed files with 21 additions and 3 deletions
|
@ -61,7 +61,7 @@ Arena *arena_alloc_sized(u64 init_res, u64 init_cmt)
|
||||||
{
|
{
|
||||||
assert(ARENA_HEADER_SIZE < init_cmt && init_cmt <= init_res);
|
assert(ARENA_HEADER_SIZE < init_cmt && init_cmt <= init_res);
|
||||||
|
|
||||||
u64 page_size = getpagesize();
|
u64 page_size = os_page_size();
|
||||||
u64 res = align_pow2(init_res, page_size);
|
u64 res = align_pow2(init_res, page_size);
|
||||||
u64 cmt = align_pow2(init_cmt, page_size);
|
u64 cmt = align_pow2(init_cmt, page_size);
|
||||||
|
|
||||||
|
@ -199,6 +199,7 @@ u8 *arena_push_contiguous(Arena *arena, u64 size)
|
||||||
arena->grow = 0;
|
arena->grow = 0;
|
||||||
void *mem = arena_push_impl(arena, size);
|
void *mem = arena_push_impl(arena, size);
|
||||||
arena->grow = restore;
|
arena->grow = restore;
|
||||||
|
if (!mem) fprintf(stderr, "Failed to allocate %lu bytes of contiguous memory\n", size);
|
||||||
return (u8 *)mem;
|
return (u8 *)mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <limits.h> // for NAME_MAX
|
#include <limits.h> // for NAME_MAX
|
||||||
|
|
||||||
|
internal
|
||||||
|
i32 os_page_size()
|
||||||
|
{
|
||||||
|
return getpagesize();
|
||||||
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
bool os_open_and_map_file(const char *fname, App_State &app)
|
bool os_open_and_map_file(const char *fname, App_State &app)
|
||||||
{
|
{
|
||||||
|
@ -56,7 +62,11 @@ void os_stop_file_watch(App_State &app)
|
||||||
internal
|
internal
|
||||||
void *os_reserve(u64 size)
|
void *os_reserve(u64 size)
|
||||||
{
|
{
|
||||||
return mmap(0, size, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
|
void *mem = mmap(0, size, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
|
||||||
|
if (UNLIKELY(mem == MAP_FAILED)) {
|
||||||
|
fprintf(stderr, "Error reserving memory: %s (%d)\n", strerror(errno), errno);
|
||||||
|
}
|
||||||
|
return mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
|
@ -68,6 +78,10 @@ void os_release(void *mem, u64 size)
|
||||||
internal
|
internal
|
||||||
b32x os_commit(void *addr, u64 size)
|
b32x os_commit(void *addr, u64 size)
|
||||||
{
|
{
|
||||||
return mprotect(addr, size, PROT_READ|PROT_WRITE) == 0;
|
b32x err = mprotect(addr, size, PROT_READ|PROT_WRITE);
|
||||||
|
if (UNLIKELY(err)) {
|
||||||
|
fprintf(stderr, "Error committing memory: %s (%d)\n", strerror(errno), errno);
|
||||||
|
}
|
||||||
|
return err == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,3 +22,6 @@ using i64 = int64_t;
|
||||||
#define KiB(b) (b * 1024)
|
#define KiB(b) (b * 1024)
|
||||||
#define MiB(b) (KiB(b) * 1024)
|
#define MiB(b) (KiB(b) * 1024)
|
||||||
#define GiB(b) (MiB(b) * 1024)
|
#define GiB(b) (MiB(b) * 1024)
|
||||||
|
|
||||||
|
#define LIKELY(x) __builtin_expect(!!(x), 1)
|
||||||
|
#define UNLIKELY(x) __builtin_expect(!!(x), 0)
|
||||||
|
|
Loading…
Reference in a new issue