split finding allocation range from actually allocating

This commit is contained in:
2025-11-28 15:37:41 +01:00
parent c056457e97
commit 7c1e195402

View File

@@ -131,7 +131,18 @@ pub fn allocate(
size: u64, size: u64,
valid_range: Range, valid_range: Range,
) !?Range { ) !?Range {
log.debug("allocate: Allocating size {} in range {f}", .{ size, valid_range }); const range = address_allocator.findAllocation(size, valid_range) orelse return null;
try address_allocator.block(gpa, range, 0);
return range;
}
/// Find a free `Range` of size `size` within `valid_range` without blocking it.
pub fn findAllocation(
address_allocator: *AddressAllocator,
size: u64,
valid_range: Range,
) ?Range {
log.debug("findAllocation: Allocating size {} in range {f}", .{ size, valid_range });
if (valid_range.size() < size) return null; if (valid_range.size() < size) return null;
if (size == 0) return null; if (size == 0) return null;
const size_i: i64 = @intCast(size); const size_i: i64 = @intCast(size);
@@ -142,7 +153,7 @@ pub fn allocate(
var candidate_start = valid_range.start; var candidate_start = valid_range.start;
for (address_allocator.ranges.items) |reserved| { for (address_allocator.ranges.items) |reserved| {
if (candidate_start >= valid_range.end) { if (candidate_start >= valid_range.end) {
log.debug("allocate: Searched past the valid range.", .{}); log.debug("findAllocation: Searched past the valid range.", .{});
break; break;
} }
@@ -155,9 +166,7 @@ pub fn allocate(
.start = candidate_start, .start = candidate_start,
.end = candidate_start + size_i, .end = candidate_start + size_i,
}; };
try address_allocator.block(gpa, new_range, 0); log.debug("findAllocation: Found free gap: {f}", .{new_range});
assert(valid_range.contains(new_range));
log.debug("allocate: Found free gap: {f}", .{new_range});
return new_range; return new_range;
} }
} }
@@ -173,13 +182,11 @@ pub fn allocate(
.start = candidate_start, .start = candidate_start,
.end = candidate_start + size_i, .end = candidate_start + size_i,
}; };
try address_allocator.block(gpa, new_range, 0); log.debug("findAllocation: Found free gap at end: {f}", .{new_range});
assert(valid_range.contains(new_range));
log.debug("allocate: Found free gap at end: {f}", .{new_range});
return new_range; return new_range;
} }
log.debug("allocate: No suitable gap found.", .{}); log.debug("findAllocation: No suitable gap found.", .{});
return null; return null;
} }