aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-27 12:30:07 +0200
committerHimbeer <himbeer@disroot.org>2024-07-27 12:30:07 +0200
commitfe16467ee3286d887a22aa3c1ed067478505bf4a (patch)
tree7a5658f34907e03e873e18f87bd6f9793c893769
parentbe6bdf6e0cabad6708e5283669a642ab9bf28b6b (diff)
syscall: Revert VFS hook /process/self/terminate => terminate() void (#60)
-rw-r--r--src/lib/resources.zig19
-rw-r--r--src/lib/syscall.zig9
2 files changed, 9 insertions, 19 deletions
diff --git a/src/lib/resources.zig b/src/lib/resources.zig
index 4a2ae7b..b345b84 100644
--- a/src/lib/resources.zig
+++ b/src/lib/resources.zig
@@ -53,14 +53,6 @@ const iofs = struct {
const processfs = struct {
const self = struct {
- fn terminate(pid: u16, thread_id: usize, _: usize) callconv(.C) Result(usize) {
- const proc = process.findThread(pid, thread_id).?;
- proc.terminate();
- process.schedule() catch |err| {
- std.debug.panic("Unable to schedule because all processes are terminated: {any}", .{err});
- };
- }
-
fn id(pid: u16, _: usize, _: usize) callconv(.C) Result(usize) {
return Result(usize).fromAnyTypeOrError(pid);
}
@@ -274,17 +266,6 @@ fn provideProcess() !void {
}
fn provideProcessSelf() !void {
- try vfs.provideResource("/process/self/terminate", .{
- .tag = .hook,
- .data = .{
- .hook = .{
- .callback = processfs.self.terminate,
- },
- },
- }, 0, .{
- .reclaimable = false,
- });
-
try vfs.provideResource("/process/self/id", .{
.tag = .hook,
.data = .{
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index a34ace4..3ce70a5 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -33,6 +33,7 @@ pub fn handler(proc: *process.Info, trap_frame: *trap.Frame) !void {
100009 => read(proc, trap_frame),
100010 => write(proc, trap_frame),
100011 => list(proc, trap_frame),
+ 100012 => terminate(proc),
else => return HandleError.UnknownSyscall,
}
}
@@ -299,3 +300,11 @@ fn list(proc: *process.Info, trap_frame: *trap.Frame) void {
const result = vfs.listZ(proc, path_c, entries[0..len]);
sysexchange.frameReturn(null, trap_frame, result);
}
+
+// terminate() void
+fn terminate(proc: *process.Info) void {
+ proc.terminate();
+ process.schedule() catch |err| {
+ std.debug.panic("Unable to schedule because all processes are terminated: {}", .{err});
+ };
+}