From d996f88bfda890df5d2b76e7c06cae329e04ab00 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sun, 1 May 2022 20:09:52 +0200 Subject: kernel/proc: make handles separate refcounted objects --- src/kernel/handle.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/kernel/handle.c (limited to 'src/kernel/handle.c') diff --git a/src/kernel/handle.c b/src/kernel/handle.c new file mode 100644 index 0000000..d7f19b3 --- /dev/null +++ b/src/kernel/handle.c @@ -0,0 +1,27 @@ +#include +#include +#include +#include + +struct handle *handle_init(enum handle_type type) { + struct handle *h = kmalloc(sizeof *h); + h->type = type; + h->refcount = 1; + return h; +} + +void handle_close(struct handle *h) { + if (!h) return; + assert(h->refcount > 0); + if (--(h->refcount) == 0) { + // TODO call close() in handler + // TODO count allocations and frees + + // TODO sanity check to check if refcount is true. handle_sanity? + + // TODO tests which would catch premature frees + // by that i mean duplicating a handle and killing the original process + h->type = HANDLE_INVALID; + kfree(h); + } +} -- cgit v1.2.3