authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2026-10-09 15:08:52-05:00
committergravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2026-10-09 17:52:13-05:00
log5f4173bb1f9fd8fd05875bb43473a14cb62a3e01
tree7de56cc2d8b297fff98a61f76513d817f9e7f7b5
parent5bec90b3bca72d4dbd8e41858224575ba0611ef5
signature Commit is signed but in an unrecognized format.

Io.Uring: clean up child process setup


1 files changed, 22 insertions(+), 16 deletions(-)

lib/std/Io/Uring.zig+22-16
......@@ -4510,6 +4510,20 @@ fn setUpChild(sync: *CancelRegion.Sync, options: struct {
45104510 PATH: []const u8,
45114511 spawn: process.SpawnOptions,
45124512}) ForkBailError {
4513 // Must happen before clobbering file descriptors below.
4514 switch (options.spawn.cwd) {
4515 .inherit => {},
4516 .dir => |cwd_dir| try fchdir(sync, cwd_dir.handle),
4517 .path => |cwd_path| {
4518 var cwd_path_buffer: [PATH_MAX]u8 = undefined;
4519 const cwd_path_posix = try pathToPosix(cwd_path, &cwd_path_buffer);
4520 try chdir(sync, cwd_path_posix);
4521 },
4522 }
4523
4524 for (options.spawn.inherit_dirs) |dir| try setFdFlags(sync, dir.handle, 0);
4525 for (options.spawn.inherit_files) |file| try setFdFlags(sync, file.handle, 0);
4526
45134527 try setUpChildIo(
45144528 sync,
45154529 options.spawn.stdin,
......@@ -4532,23 +4546,15 @@ fn setUpChild(sync: *CancelRegion.Sync, options: struct {
45324546 options.dev_null_fd,
45334547 );
45344548
4535 switch (options.spawn.cwd) {
4536 .inherit => {},
4537 .dir => |cwd_dir| try fchdir(sync, cwd_dir.handle),
4538 .path => |cwd_path| {
4539 var cwd_path_buffer: [PATH_MAX]u8 = undefined;
4540 const cwd_path_posix = try pathToPosix(cwd_path, &cwd_path_buffer);
4541 try chdir(sync, cwd_path_posix);
4542 },
4549 // Must happen after fchdir above because the cwd file descriptor might be
4550 // equal to prog_fileno and be clobbered by this operation.
4551 if (options.prog_pipe != -1) {
4552 if (options.prog_pipe == prog_fileno)
4553 try setFdFlags(sync, options.prog_pipe, 0)
4554 else
4555 try dup2(sync, options.prog_pipe, prog_fileno);
45434556 }
45444557
4545 for (options.spawn.inherit_dirs) |dir| try setFdFlags(sync, dir.handle, 0);
4546 for (options.spawn.inherit_files) |file| try setFdFlags(sync, file.handle, 0);
4547
4548 // Must happen after fchdir above, the cwd file descriptor might be
4549 // equal to prog_fileno and be clobbered by this dup2 call.
4550 if (options.prog_pipe != -1) try dup2(sync, options.prog_pipe, prog_fileno);
4551
45524558 if (options.spawn.gid) |gid| {
45534559 switch (linux.errno(linux.setregid(gid, gid))) {
45544560 .SUCCESS => {},
......@@ -4580,7 +4586,7 @@ fn setUpChild(sync: *CancelRegion.Sync, options: struct {
45804586 }
45814587
45824588 if (options.spawn.start_suspended) {
4583 switch (linux.errno(linux.kill(0, .STOP))) {
4589 switch (linux.errno(linux.kill(linux.getpid(), .STOP))) {
45844590 .SUCCESS => {},
45854591 .PERM => return error.PermissionDenied,
45864592 else => return error.Unexpected,