diff options
| author | Bobby <[email protected]> | 2026-02-24 06:56:58 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-02-24 06:56:58 +0530 |
| commit | 5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8 (patch) | |
| tree | 2ae2a13678844b82b43583ca28eed4d4b6223ec0 /mirai.old/invocations/kata/wait.zig | |
| parent | 297c66b480a238dad5ce7f03405fe6f5b9123701 (diff) | |
| download | akiba-5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8.tar.xz akiba-5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8.zip | |
Bunch of stuff moved as .old for new arch change
Diffstat (limited to 'mirai.old/invocations/kata/wait.zig')
| -rw-r--r-- | mirai.old/invocations/kata/wait.zig | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/mirai.old/invocations/kata/wait.zig b/mirai.old/invocations/kata/wait.zig new file mode 100644 index 0000000..e657e90 --- /dev/null +++ b/mirai.old/invocations/kata/wait.zig @@ -0,0 +1,46 @@ +//! Wait invocation - Wait for child Kata to dissolve + +const handler = @import("../handler.zig"); +const int = @import("../../utils/types/int.zig"); +const kata_mod = @import("../../kata/kata.zig"); +const result = @import("../../utils/types/result.zig"); +const sensei = @import("../../kata/sensei/sensei.zig"); + +pub fn invoke(ctx: *handler.InvocationContext) void { + const target_id = int.u32_of(ctx.rdi); + + const target = kata_mod.get_kata(target_id) orelse return result.set_error(ctx); + + // Zombie or Dissolved means the child has exited + if (target.state == .Zombie or target.state == .Dissolved) { + return result.set_value(ctx, target.exit_code); + } + + const current = sensei.get_current_kata() orelse return result.set_error(ctx); + + current.state = .Stalled; + current.waiting_for = target_id; + + current.context.rax = 0; + current.context.rbx = ctx.rbx; + current.context.rcx = ctx.rcx; + current.context.rdx = ctx.rdx; + current.context.rsi = ctx.rsi; + current.context.rdi = ctx.rdi; + current.context.rbp = ctx.rbp; + current.context.rsp = ctx.rsp; + current.context.r8 = ctx.r8; + current.context.r9 = ctx.r9; + current.context.r10 = ctx.r10; + current.context.r11 = ctx.r11; + current.context.r12 = ctx.r12; + current.context.r13 = ctx.r13; + current.context.r14 = ctx.r14; + current.context.r15 = ctx.r15; + current.context.rip = ctx.rip; + current.context.rflags = ctx.rflags; + current.context.cs = ctx.cs; + current.context.ss = ctx.ss; + + sensei.schedule(); +} |
