diff options
Diffstat (limited to 'src/lib/process.zig')
-rw-r--r-- | src/lib/process.zig | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/lib/process.zig b/src/lib/process.zig index dcb1baa..a4bbb75 100644 --- a/src/lib/process.zig +++ b/src/lib/process.zig @@ -7,6 +7,7 @@ const std = @import("std"); const instructions = @import("instructions.zig"); const paging = @import("paging.zig"); +const sysexchange = @import("sysexchange.zig"); const time = @import("sbi/time.zig"); const trap = @import("trap.zig"); const vfs = @import("vfs.zig"); @@ -171,6 +172,10 @@ pub const Info = struct { var node = list.first; while (node) |proc_node| : (node = proc_node.next) { if (self.shouldRemove(&proc_node.data)) { + if (proc_node.data.thread_id != self.thread_id) { + proc_node.data.terminate(); + } + list.remove(proc_node); self.allocator.destroy(proc_node); } @@ -194,6 +199,7 @@ pub const Info = struct { cleanup_hook.cleanupFn(self, cleanup_hook.buffer, cleanup_hook.copy); } if (self.term_hook) |term_hook| { + sysexchange.frameReturn(void, &self.trap_frame, vfs.Error.Detached); term_hook.hookFn(term_hook.context, self); } } |