diff options
Diffstat (limited to 'src/kernel/handle.c')
-rw-r--r-- | src/kernel/handle.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/src/kernel/handle.c b/src/kernel/handle.c index 103c788..ac8db1f 100644 --- a/src/kernel/handle.c +++ b/src/kernel/handle.c @@ -16,22 +16,17 @@ void handle_close(struct handle *h) { assert(h->refcount > 0); if (--(h->refcount) > 0) return; - switch (h->type) { - case HANDLE_FILE: - vfsreq_create((struct vfs_request) { - .type = VFSOP_CLOSE, - .id = h->file.id, - .caller = NULL, - .backend = h->file.backend, - }); - vfs_backend_refdown(h->file.backend); - break; - case HANDLE_FS_FRONT: - vfs_backend_refdown(h->fs.backend); - break; - case HANDLE_INVALID: panic_invalid_state(); + if (h->type == HANDLE_FILE) { + vfsreq_create((struct vfs_request) { + .type = VFSOP_CLOSE, + .id = h->file_id, + .caller = NULL, + .backend = h->backend, + }); } + vfs_backend_refdown(h->backend); + // TODO sanity check to check if refcount is true. handle_sanity? // TODO tests which would catch premature frees |