aboutsummaryrefslogtreecommitdiff
path: root/src/lib/process.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/process.zig')
-rw-r--r--src/lib/process.zig6
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);
}
}