summaryrefslogtreecommitdiff
path: root/src/kernel/handle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/handle.c')
-rw-r--r--src/kernel/handle.c23
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