VFS object auto cleanup
This commit is contained in:
@ -55,6 +55,11 @@ int32_t SYSCALL3(sys_ioctl, ioh1, cmd1, optsptr1) {
|
||||
spinlock_release(&PROCS.spinlock);
|
||||
} break;
|
||||
case IOCTL_CLOSEF: {
|
||||
if (ioh >= PROC_VFSHANDLES_MAX) {
|
||||
ret = E_INVALIDARGUMENT;
|
||||
goto done;
|
||||
}
|
||||
|
||||
spinlock_acquire(&PROCS.spinlock);
|
||||
Proc *proc = PROCS.current;
|
||||
VfsObj *vobj = proc->vobjs[ioh];
|
||||
@ -65,7 +70,15 @@ int32_t SYSCALL3(sys_ioctl, ioh1, cmd1, optsptr1) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
size_t i = 0;
|
||||
for (; i < PROC_VFSHANDLES_MAX; i++) {
|
||||
if (proc->vobjs[i] == vobj) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
vfs_close(vobj);
|
||||
proc->vobjs[i] = NULL;
|
||||
ret = E_OK;
|
||||
} break;
|
||||
case IOCTL_WRITE: {
|
||||
|
Reference in New Issue
Block a user