Skip to content

Commit d5770b0

Browse files
committed
Eliminate one more place that assumes merge is 2 segments long
1 parent 0d5b0e4 commit d5770b0

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

src/Index.zig

+21-9
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,16 @@ fn prepareMemorySegmentMerge(self: *Self) !?MemorySegmentList.PreparedMerge {
146146
}
147147

148148
fn finishMemorySegmentMerge(self: *Self, merge: MemorySegmentList.PreparedMerge) bool {
149-
std.debug.assert(merge.sources.num_segments == 2);
150-
defer self.memory_segments.destroySegment(merge.sources.start);
151-
defer self.memory_segments.destroySegment(merge.sources.end);
149+
defer {
150+
var iter = merge.sources.start;
151+
while (true) {
152+
const next_node = iter.next;
153+
const is_end = iter == merge.sources.end;
154+
self.memory_segments.destroySegment(iter);
155+
if (is_end) break;
156+
iter = next_node orelse break;
157+
}
158+
}
152159

153160
self.segments_lock.lock();
154161
defer self.segments_lock.unlock();
@@ -452,12 +459,17 @@ fn finishFileSegmentMerge(self: *Self, merge: FileSegmentList.PreparedMerge) !vo
452459

453460
try filefmt.writeIndexFile(self.data_dir, ids.items);
454461

455-
std.debug.assert(merge.sources.num_segments == 2);
456-
defer self.file_segments.destroySegment(merge.sources.start);
457-
defer self.file_segments.destroySegment(merge.sources.end);
458-
459-
defer merge.sources.start.data.delete(self.data_dir);
460-
defer merge.sources.end.data.delete(self.data_dir);
462+
defer {
463+
var iter = merge.sources.start;
464+
while (true) {
465+
const next_node = iter.next;
466+
const is_end = iter == merge.sources.end;
467+
iter.data.delete(self.data_dir);
468+
self.file_segments.destroySegment(iter);
469+
if (is_end) break;
470+
iter = next_node orelse break;
471+
}
472+
}
461473

462474
self.segments_lock.lock();
463475
defer self.segments_lock.unlock();

0 commit comments

Comments
 (0)