소스 검색

Merge branch 'master' into windows-llvm-13.0.0

gingerBill 3 년 전
부모
커밋
6e7aab3c55
2개의 변경된 파일7개의 추가작업 그리고 5개의 파일을 삭제
  1. 2 2
      core/mem/virtual/virtual.odin
  2. 5 3
      core/mem/virtual/virtual_windows.odin

+ 2 - 2
core/mem/virtual/virtual.odin

@@ -63,6 +63,7 @@ memory_block_alloc :: proc(committed, reserved: uint, flags: Memory_Block_Flags)
 	}
 	
 	page_size := DEFAULT_PAGE_SIZE
+	assert(mem.is_power_of_two(uintptr(page_size)))
 	committed := committed
 	committed = clamp(committed, 0, reserved)
 	
@@ -82,8 +83,7 @@ memory_block_alloc :: proc(committed, reserved: uint, flags: Memory_Block_Flags)
 	pmblock := platform_memory_alloc(0, total_size) or_return
 	
 	pmblock.block.base = ([^]byte)(uintptr(pmblock) + base_offset)
-	commit_err := platform_memory_commit(pmblock, uint(base_offset) + committed)
-	assert(commit_err == nil)
+	platform_memory_commit(pmblock, uint(base_offset) + committed) or_return
 
 	// Should be zeroed
 	assert(pmblock.block.used == 0)

+ 5 - 3
core/mem/virtual/virtual_windows.odin

@@ -51,6 +51,7 @@ PAGE_TARGETS_INVALID   :: 0x40000000
 PAGE_TARGETS_NO_UPDATE :: 0x40000000
 
 ERROR_INVALID_ADDRESS :: 487
+ERROR_COMMITMENT_LIMIT :: 1455
 
 @(default_calling_convention="stdcall")
 foreign Kernel32 {
@@ -76,12 +77,13 @@ _commit :: proc "contextless" (data: rawptr, size: uint) -> Allocator_Error {
 	result := VirtualAlloc(data, size, MEM_COMMIT, PAGE_READWRITE)
 	if result == nil {
 		switch err := GetLastError(); err {
-		case ERROR_INVALID_ADDRESS:
+		case 0:
+			return .Invalid_Argument
+		case ERROR_INVALID_ADDRESS, ERROR_COMMITMENT_LIMIT:
 			return .Out_Of_Memory
 		}
 
-		// TODO(bill): Handle errors correctly
-		return .Invalid_Argument
+		return .Out_Of_Memory
 	}
 	return nil
 }