authorgravatar for matthew.h.borkowski@gmail.comMatthew Borkowski <matthew.h.borkowski@gmail.com> 2021-12-01 03:56:44-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-12-01 13:34:53-08:00
log02a1f838e67edc4107df19ba194a925958f1c669
treef41eabdcb03f4db3f697fb6c908ba029ad4ca27e
parent8c3624313600c307bc101564a81c4035ec923dee

gpa: fix leak in freeLarge and memory limit accounting in resize and resizeLarge


1 files changed, 14 insertions(+), 7 deletions(-)

lib/std/heap/general_purpose_allocator.zig+14-7
......@@ -561,11 +561,13 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type {
561561 }
562562 self.total_requested_bytes = new_req_bytes;
563563 }
564 errdefer if (config.enable_memory_limit) {
565 self.total_requested_bytes = prev_req_bytes;
566 };
567564
568 const result_len = self.backing_allocator.rawResize(old_mem, old_align, new_size, len_align, ret_addr) orelse return null;
565 const result_len = self.backing_allocator.rawResize(old_mem, old_align, new_size, len_align, ret_addr) orelse {
566 if (config.enable_memory_limit) {
567 self.total_requested_bytes = prev_req_bytes;
568 }
569 return null;
570 };
569571
570572 if (config.enable_memory_limit) {
571573 entry.value_ptr.requested_size = new_size;
......@@ -623,6 +625,10 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type {
623625 });
624626 }
625627
628 if (!config.never_unmap) {
629 self.backing_allocator.rawFree(old_mem, old_align, ret_addr);
630 }
631
626632 if (config.enable_memory_limit) {
627633 self.total_requested_bytes -= entry.value_ptr.requested_size;
628634 }
......@@ -711,9 +717,6 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type {
711717 }
712718 self.total_requested_bytes = new_req_bytes;
713719 }
714 errdefer if (config.enable_memory_limit) {
715 self.total_requested_bytes = prev_req_bytes;
716 };
717720
718721 const new_aligned_size = math.max(new_size, old_align);
719722 const new_size_class = math.ceilPowerOfTwoAssert(usize, new_aligned_size);
......@@ -728,6 +731,10 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type {
728731 }
729732 return new_size;
730733 }
734
735 if (config.enable_memory_limit) {
736 self.total_requested_bytes = prev_req_bytes;
737 }
731738 return null;
732739 }
733740