From 6b9bed50476f8e4050c9124d4e28010d8455d332 Mon Sep 17 00:00:00 2001 From: Astronand Date: Sat, 14 Feb 2026 23:31:45 -0500 Subject: [PATCH] fixed task cleanup fd errors --- Src/Hyperion-core/lib/sys/fs | 3 +-- Src/Hyperion-kernel/lib/modules/Hyperion/10_vfs.kmod | 1 - Src/Hyperion-kernel/lib/modules/Hyperion/45_hypervisor.kmod | 6 +++++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Src/Hyperion-core/lib/sys/fs b/Src/Hyperion-core/lib/sys/fs index ba4ebee..e4fcbf8 100644 --- a/Src/Hyperion-core/lib/sys/fs +++ b/Src/Hyperion-core/lib/sys/fs @@ -15,8 +15,7 @@ function fs.open(path, mode) end, flush=function() -- close and reopen file to flush buffers - syscall.close(fd) - fd=syscall.open(path,mode) + syscall.fsync(fd) end } if mode=="r" then diff --git a/Src/Hyperion-kernel/lib/modules/Hyperion/10_vfs.kmod b/Src/Hyperion-kernel/lib/modules/Hyperion/10_vfs.kmod index 3f7ffd9..b289188 100644 --- a/Src/Hyperion-kernel/lib/modules/Hyperion/10_vfs.kmod +++ b/Src/Hyperion-kernel/lib/modules/Hyperion/10_vfs.kmod @@ -339,7 +339,6 @@ end -- Write function vfs.write(fd, content) - kernel.log(tostring(fd).."|"..content) local task = kernel.currentTask local file = task.fd[fd] if not file then error("EBADF") end diff --git a/Src/Hyperion-kernel/lib/modules/Hyperion/45_hypervisor.kmod b/Src/Hyperion-kernel/lib/modules/Hyperion/45_hypervisor.kmod index c874114..e9d9ca7 100644 --- a/Src/Hyperion-kernel/lib/modules/Hyperion/45_hypervisor.kmod +++ b/Src/Hyperion-kernel/lib/modules/Hyperion/45_hypervisor.kmod @@ -234,6 +234,10 @@ kernel._G.sleep = function(...) coroutine.yield("syscall", "sleep", ...) end local function reapDeadTasks() for pid, task in pairs(tasks) do if task.status == "Z" and not task.reapTime then + kernel.currentTask = task + kernel.username = task.username + kernel.uid = task.uid + kernel.process = task.name task.coro = nil task.ivs = nil task.vs = nil @@ -302,7 +306,7 @@ function kernel.main() kernel.uid = task.uid kernel.process = task.name N = N + 1 - + -- assign adaptive time slice task.timeSlice = math.min(Tmax, math.max(Tmin, B / (N ^ alpha)))