aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/invocations/kata/wait.zig
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-24 06:56:58 +0530
committerBobby <[email protected]>2026-02-24 06:56:58 +0530
commit5fe89e6f5b6fd6f5b5589b9e5d4714e0f4fbe5e8 (patch)
tree2ae2a13678844b82b43583ca28eed4d4b6223ec0 /mirai.old/invocations/kata/wait.zig
parent297c66b480a238dad5ce7f03405fe6f5b9123701 (diff)
downloadakiba-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.zig46
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();
+}