mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Add better error message for compiler when OOM happens
This commit is contained in:
+17
-2
@@ -139,6 +139,7 @@ struct PlatformMemoryBlock {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
gb_global std::atomic<isize> global_platform_memory_total_usage;
|
||||||
gb_global PlatformMemoryBlock global_platform_memory_block_sentinel;
|
gb_global PlatformMemoryBlock global_platform_memory_block_sentinel;
|
||||||
|
|
||||||
PlatformMemoryBlock *platform_virtual_memory_alloc(isize total_size);
|
PlatformMemoryBlock *platform_virtual_memory_alloc(isize total_size);
|
||||||
@@ -158,10 +159,17 @@ void platform_virtual_memory_protect(void *memory, isize size);
|
|||||||
|
|
||||||
PlatformMemoryBlock *platform_virtual_memory_alloc(isize total_size) {
|
PlatformMemoryBlock *platform_virtual_memory_alloc(isize total_size) {
|
||||||
PlatformMemoryBlock *pmblock = (PlatformMemoryBlock *)VirtualAlloc(0, total_size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
|
PlatformMemoryBlock *pmblock = (PlatformMemoryBlock *)VirtualAlloc(0, total_size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
|
||||||
GB_ASSERT_MSG(pmblock != nullptr, "Out of Virtual Memory, oh no...");
|
if (pmblock == nullptr) {
|
||||||
|
gb_printf_err("Out of Virtual memory, oh no...\n");
|
||||||
|
gb_printf_err("Requested: %lld bytes\n", cast(long long)total_size);
|
||||||
|
gb_printf_err("Total Usage: %lld bytes\n", cast(long long)global_platform_memory_total_usage);
|
||||||
|
GB_ASSERT_MSG(pmblock != nullptr, "Out of Virtual Memory, oh no...");
|
||||||
|
}
|
||||||
|
global_platform_memory_total_usage += total_size;
|
||||||
return pmblock;
|
return pmblock;
|
||||||
}
|
}
|
||||||
void platform_virtual_memory_free(PlatformMemoryBlock *block) {
|
void platform_virtual_memory_free(PlatformMemoryBlock *block) {
|
||||||
|
global_platform_memory_total_usage -= block->total_size;
|
||||||
GB_ASSERT(VirtualFree(block, 0, MEM_RELEASE));
|
GB_ASSERT(VirtualFree(block, 0, MEM_RELEASE));
|
||||||
}
|
}
|
||||||
void platform_virtual_memory_protect(void *memory, isize size) {
|
void platform_virtual_memory_protect(void *memory, isize size) {
|
||||||
@@ -180,11 +188,18 @@ void platform_virtual_memory_protect(void *memory, isize size);
|
|||||||
|
|
||||||
PlatformMemoryBlock *platform_virtual_memory_alloc(isize total_size) {
|
PlatformMemoryBlock *platform_virtual_memory_alloc(isize total_size) {
|
||||||
PlatformMemoryBlock *pmblock = (PlatformMemoryBlock *)mmap(nullptr, total_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
PlatformMemoryBlock *pmblock = (PlatformMemoryBlock *)mmap(nullptr, total_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||||
GB_ASSERT_MSG(pmblock != nullptr, "Out of Virtual Memory, oh no...");
|
if (pmblock == nullptr) {
|
||||||
|
gb_printf_err("Out of Virtual memory, oh no...\n");
|
||||||
|
gb_printf_err("Requested: %lld bytes\n", cast(long long)total_size);
|
||||||
|
gb_printf_err("Total Usage: %lld bytes\n", cast(long long)global_platform_memory_total_usage);
|
||||||
|
GB_ASSERT_MSG(pmblock != nullptr, "Out of Virtual Memory, oh no...");
|
||||||
|
}
|
||||||
|
global_platform_memory_total_usage += total_size;
|
||||||
return pmblock;
|
return pmblock;
|
||||||
}
|
}
|
||||||
void platform_virtual_memory_free(PlatformMemoryBlock *block) {
|
void platform_virtual_memory_free(PlatformMemoryBlock *block) {
|
||||||
isize size = block->total_size;
|
isize size = block->total_size;
|
||||||
|
global_platform_memory_total_usage -= size;
|
||||||
munmap(block, size);
|
munmap(block, size);
|
||||||
}
|
}
|
||||||
void platform_virtual_memory_protect(void *memory, isize size) {
|
void platform_virtual_memory_protect(void *memory, isize size) {
|
||||||
|
|||||||
Reference in New Issue
Block a user