authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-10-30 19:28:26-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-10-30 19:28:26-07:00
logd02242661e667e67b07faf69490bb0db3dfd4bf0
tree59ac3378117f2684b4d92a26adbc0d967a171180
parentef761c2cbc5c9a06da5c09de389a1d778731d170

std.heap: make wasm32 PageAllocator handle large allocation

When a number of bytes to be allocated is so great that alignForward() is not possible, return `error.OutOfMemory`. Companion commit to 3f3003097cbf5a6ad9e0dfc29b2cafbe2e35dded.

1 files changed, 3 insertions(+), 0 deletions(-)

lib/std/heap.zig+3
...@@ -523,6 +523,9 @@ const WasmPageAllocator = struct {...@@ -523,6 +523,9 @@ const WasmPageAllocator = struct {
523523
524 fn alloc(_: *anyopaque, len: usize, alignment: u29, len_align: u29, ra: usize) error{OutOfMemory}![]u8 {524 fn alloc(_: *anyopaque, len: usize, alignment: u29, len_align: u29, ra: usize) error{OutOfMemory}![]u8 {
525 _ = ra;525 _ = ra;
526 if (len > maxInt(usize) - (mem.page_size - 1)) {
527 return error.OutOfMemory;
528 }
526 const page_count = nPages(len);529 const page_count = nPages(len);
527 const page_idx = try allocPages(page_count, alignment);530 const page_idx = try allocPages(page_count, alignment);
528 return @intToPtr([*]u8, page_idx * mem.page_size)[0..alignPageAllocLen(page_count * mem.page_size, len, len_align)];531 return @intToPtr([*]u8, page_idx * mem.page_size)[0..alignPageAllocLen(page_count * mem.page_size, len, len_align)];