Added dedicated single_threaded mode for extraction

Cleanup
This commit is contained in:
Caleb Gardner
2026-05-24 06:45:23 -05:00
parent 712c4d0a19
commit a9e50a0ff5
6 changed files with 220 additions and 47 deletions
+17 -27
View File
@@ -227,34 +227,24 @@ test "ExtractCompleteArchiveSingleThreaded" {
std.debug.print("Starting test: ExtractCompleteArchive...\n", .{});
const alloc = std.testing.allocator;
var threaded: Io.Evented = undefined;
try threaded.init(alloc, .{});
defer threaded.deinit();
const io = threaded.io();
var signal: u32 = 0;
const io = std.testing.io;
Io.Dir.cwd().deleteTree(io, TestFullExtractLocation) catch {};
const tmp = struct {
fn singleThreadedExtract(sig: *u32) !void {
var fil = try Io.Dir.cwd().openFile(Io.Threaded.global_single_threaded.io(), TestArchive, .{});
defer fil.close(Io.Threaded.global_single_threaded.io());
var sfs: Archive = try .init(Io.Threaded.global_single_threaded.io(), fil, 0);
defer sfs.deinit(Io.Threaded.global_single_threaded.io());
try sfs.extract(std.testing.allocator, Io.Threaded.global_single_threaded.io(), TestFullExtractLocation, .default);
sig.* = 1;
}
};
var ret = try io.concurrent(tmp.singleThreadedExtract, .{&signal});
try io.futexWaitTimeout(
u32,
&signal,
0,
.{ .deadline = .fromNow(io, .{ .raw = .fromSeconds(10), .clock = .awake }) },
);
if (ret.any_future == null) return ret.result;
try ret.cancel(io);
return error.TestTimeout;
var fil = try Io.Dir.cwd().openFile(io, TestArchive, .{});
defer fil.close(io);
{
std.debug.print("First testing using Threaded.global_single_threaded...\n", .{});
Io.Dir.cwd().deleteTree(io, TestFullExtractLocation) catch {};
var sfs: Archive = try .init(Io.Threaded.global_single_threaded.io(), fil, 0);
defer sfs.deinit(Io.Threaded.global_single_threaded.io());
try sfs.extract(alloc, Io.Threaded.global_single_threaded.io(), TestFullExtractLocation, .default);
}
{
std.debug.print("Next testing using ExtractionOptions.single_threaded...\n", .{});
Io.Dir.cwd().deleteTree(io, TestFullExtractLocation) catch {};
var sfs: Archive = try .init(io, fil, 0);
defer sfs.deinit(io);
try sfs.extract(alloc, io, TestFullExtractLocation, .default_single_threaded);
}
}
const LinuxPATestCorrectSuperblock: Superblock = .{