From 31d654e6503229c52172d72eaa018e1f274b6d48 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Fri, 6 May 2022 15:00:25 +0200 Subject: kernel: remove the union in `struct handle` --- src/kernel/handle.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'src/kernel/handle.c') 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 -- cgit v1.2.3