authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-04-03 18:07:46-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-02 16:30:59-07:00
logb4fb7df1404f6fb20405ef31abf68f61dd13e4cb
tree1a0f2633057f9556f46e3a513eb0a3fd93e115dd
parent4a3ef0f779ab7a18a5968537f2cec573aff11554

Io.EventLoop: select stub


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

lib/std/Io/EventLoop.zig+21-14
......@@ -141,7 +141,7 @@ pub fn io(el: *EventLoop) Io {
141141 .@"async" = @"async",
142142 .@"await" = @"await",
143143 .go = go,
144
144 .select = select,
145145 .cancel = cancel,
146146 .cancelRequested = cancelRequested,
147147
......@@ -728,6 +728,13 @@ fn @"async"(
728728 return @ptrCast(fiber);
729729}
730730
731fn select(userdata: ?*anyopaque, futures: []const *Io.AnyFuture) usize {
732 const el: *EventLoop = @alignCast(@ptrCast(userdata));
733 _ = el;
734 _ = futures;
735 @panic("TODO");
736}
737
731738const DetachedClosure = struct {
732739 event_loop: *EventLoop,
733740 fiber: *Fiber,
......@@ -870,10 +877,10 @@ fn cancelRequested(userdata: ?*anyopaque) bool {
870877
871878fn createFile(
872879 userdata: ?*anyopaque,
873 dir: std.fs.Dir,
880 dir: Io.Dir,
874881 sub_path: []const u8,
875 flags: Io.CreateFlags,
876) Io.FileOpenError!std.fs.File {
882 flags: Io.File.CreateFlags,
883) Io.File.OpenError!Io.File {
877884 const el: *EventLoop = @alignCast(@ptrCast(userdata));
878885 const thread: *Thread = .current();
879886 const iou = &thread.io_uring;
......@@ -921,7 +928,7 @@ fn createFile(
921928 .opcode = .OPENAT,
922929 .flags = 0,
923930 .ioprio = 0,
924 .fd = dir.fd,
931 .fd = dir.handle,
925932 .off = 0,
926933 .addr = @intFromPtr(&sub_path_c),
927934 .len = @intCast(flags.mode),
......@@ -972,10 +979,10 @@ fn createFile(
972979
973980fn openFile(
974981 userdata: ?*anyopaque,
975 dir: std.fs.Dir,
982 dir: Io.Dir,
976983 sub_path: []const u8,
977 flags: Io.OpenFlags,
978) Io.FileOpenError!std.fs.File {
984 flags: Io.File.OpenFlags,
985) Io.File.OpenError!Io.File {
979986 const el: *EventLoop = @alignCast(@ptrCast(userdata));
980987 const thread: *Thread = .current();
981988 const iou = &thread.io_uring;
......@@ -1029,7 +1036,7 @@ fn openFile(
10291036 .opcode = .OPENAT,
10301037 .flags = 0,
10311038 .ioprio = 0,
1032 .fd = dir.fd,
1039 .fd = dir.handle,
10331040 .off = 0,
10341041 .addr = @intFromPtr(&sub_path_c),
10351042 .len = 0,
......@@ -1078,7 +1085,7 @@ fn openFile(
10781085 }
10791086}
10801087
1081fn closeFile(userdata: ?*anyopaque, file: std.fs.File) void {
1088fn closeFile(userdata: ?*anyopaque, file: Io.File) void {
10821089 const el: *EventLoop = @alignCast(@ptrCast(userdata));
10831090 const thread: *Thread = .current();
10841091 const iou = &thread.io_uring;
......@@ -1114,7 +1121,7 @@ fn closeFile(userdata: ?*anyopaque, file: std.fs.File) void {
11141121 }
11151122}
11161123
1117fn pread(userdata: ?*anyopaque, file: std.fs.File, buffer: []u8, offset: std.posix.off_t) Io.FilePReadError!usize {
1124fn pread(userdata: ?*anyopaque, file: Io.File, buffer: []u8, offset: std.posix.off_t) Io.File.PReadError!usize {
11181125 const el: *EventLoop = @alignCast(@ptrCast(userdata));
11191126 const thread: *Thread = .current();
11201127 const iou = &thread.io_uring;
......@@ -1166,7 +1173,7 @@ fn pread(userdata: ?*anyopaque, file: std.fs.File, buffer: []u8, offset: std.pos
11661173 }
11671174}
11681175
1169fn pwrite(userdata: ?*anyopaque, file: std.fs.File, buffer: []const u8, offset: std.posix.off_t) Io.FilePWriteError!usize {
1176fn pwrite(userdata: ?*anyopaque, file: Io.File, buffer: []const u8, offset: std.posix.off_t) Io.File.PWriteError!usize {
11701177 const el: *EventLoop = @alignCast(@ptrCast(userdata));
11711178 const thread: *Thread = .current();
11721179 const iou = &thread.io_uring;
......@@ -1236,7 +1243,7 @@ fn sleep(userdata: ?*anyopaque, clockid: std.posix.clockid_t, deadline: Io.Deadl
12361243 try fiber.enterCancelRegion(thread);
12371244
12381245 const deadline_nanoseconds: i96 = switch (deadline) {
1239 .nanoseconds => |nanoseconds| nanoseconds,
1246 .duration => |duration| duration.nanoseconds,
12401247 .timestamp => |timestamp| @intFromEnum(timestamp),
12411248 };
12421249 const timespec: std.os.linux.kernel_timespec = .{
......@@ -1252,7 +1259,7 @@ fn sleep(userdata: ?*anyopaque, clockid: std.posix.clockid_t, deadline: Io.Deadl
12521259 .addr = @intFromPtr(&timespec),
12531260 .len = 1,
12541261 .rw_flags = @as(u32, switch (deadline) {
1255 .nanoseconds => 0,
1262 .duration => 0,
12561263 .timestamp => std.os.linux.IORING_TIMEOUT_ABS,
12571264 }) | @as(u32, switch (clockid) {
12581265 .REALTIME => std.os.linux.IORING_TIMEOUT_REALTIME,