summaryrefslogtreecommitdiff
path: root/src/kernel/vfs
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/vfs')
-rw-r--r--src/kernel/vfs/request.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/kernel/vfs/request.c b/src/kernel/vfs/request.c
index edb1fce..7c1861d 100644
--- a/src/kernel/vfs/request.c
+++ b/src/kernel/vfs/request.c
@@ -83,17 +83,22 @@ int vfs_request_finish(struct vfs_request *req, int ret) {
// open() calls need special handling
// we need to wrap the id returned by the VFS in a handle passed to
// the client
- assert(req->caller);
- handle_t handle = process_find_handle(req->caller, 0);
- if (handle < 0)
- panic_invalid_state(); // we check for free handles before the open() call
-
- struct handle *backing = handle_init(HANDLE_FILE);
- backing->file.backend = req->backend;
- req->backend->refcount++;
- backing->file.id = ret;
- req->caller->handles[handle] = backing;
- ret = handle;
+ if (req->caller) {
+ handle_t handle = process_find_handle(req->caller, 0);
+ if (handle < 0)
+ panic_invalid_state(); // we check for free handles before the open() call
+
+ struct handle *backing = handle_init(HANDLE_FILE);
+ backing->file.backend = req->backend;
+ req->backend->refcount++;
+ backing->file.id = ret;
+ req->caller->handles[handle] = backing;
+ ret = handle;
+ } else {
+ // caller got killed
+ // TODO write tests & implement
+ panic_unimplemented();
+ }
}
if (req->input.kern)