@@ -146,9 +146,16 @@ fn prepareMemorySegmentMerge(self: *Self) !?MemorySegmentList.PreparedMerge {
146
146
}
147
147
148
148
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
+ }
152
159
153
160
self .segments_lock .lock ();
154
161
defer self .segments_lock .unlock ();
@@ -452,12 +459,17 @@ fn finishFileSegmentMerge(self: *Self, merge: FileSegmentList.PreparedMerge) !vo
452
459
453
460
try filefmt .writeIndexFile (self .data_dir , ids .items );
454
461
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
+ }
461
473
462
474
self .segments_lock .lock ();
463
475
defer self .segments_lock .unlock ();
0 commit comments