diff --git a/kernel/proc/proc.c b/kernel/proc/proc.c index 49dfbf1..2f91f7f 100644 --- a/kernel/proc/proc.c +++ b/kernel/proc/proc.c @@ -180,7 +180,7 @@ void proc_reaper(void) { Proc *zombie = head; LL_REMOVE(PROCS.procs, zombie); - for (size_t i = 0; i < zombie->vobjcnt; i++) { + for (size_t i = 0; i < PROC_VFSHANDLES_MAX; i++) { if (zombie->vobjs[i] != NULL) { vfs_close(zombie->vobjs[i]); zombie->vobjs[i] = NULL; diff --git a/kernel/proc/proc.h b/kernel/proc/proc.h index b3ded6d..254bb33 100644 --- a/kernel/proc/proc.h +++ b/kernel/proc/proc.h @@ -55,7 +55,6 @@ typedef struct Proc { VasRange *vas; VfsObj *vobjs[PROC_VFSHANDLES_MAX]; - uint64_t vobjcnt; IpcPipe *pipes[PROC_PIPEHANDLES_MAX]; SpinLock pipes_spinlock; diff --git a/kernel/syscall/fs.c b/kernel/syscall/fs.c index ebe17ab..f363e1e 100644 --- a/kernel/syscall/fs.c +++ b/kernel/syscall/fs.c @@ -38,18 +38,16 @@ int32_t SYSCALL2(sys_fs_openf, opath1, oflags1) { Proc *proc = PROCS.current; spinlock_release(&PROCS.spinlock); - if (proc->vobjcnt < PROC_VFSHANDLES_MAX) { - for (size_t i = 0; i < PROC_VFSHANDLES_MAX; i++) { - if (proc->vobjs[i] == NULL) { - proc->vobjs[i] = vobj; - ret = i; - break; - } + for (size_t i = 0; i < PROC_VFSHANDLES_MAX; i++) { + if (proc->vobjs[i] == NULL) { + proc->vobjs[i] = vobj; + ret = i; + goto done; } - } else { - ret = E_NOMEMORY; } + ret = E_NOMEMORY; + done: return ret; }