obj: object header is no longer allocated automatically

This commit is contained in:
2023-05-06 19:48:14 +01:00
parent 79c30e5393
commit f52ca2f1e2
13 changed files with 97 additions and 66 deletions

View File

@@ -5,13 +5,17 @@
#include <socks/object.h>
#include <stddef.h>
#define KEXT_CAST(p) OBJECT_C_CAST(struct kext, k_base, &kext_type, p)
static spin_lock_t kext_tree_lock = SPIN_LOCK_INIT;
static struct object *kext_set;
struct btree kext_tree;
static struct object_type kext_type;
static kern_status_t kext_query_name(struct object *obj, char out[OBJECT_NAME_MAX])
{
struct kext *kext = object_data(obj);
struct kext *kext = KEXT_CAST(obj);
strncpy(out, kext->k_ident, OBJECT_NAME_MAX - 1);
out[OBJECT_NAME_MAX - 1] = 0;
return KERN_OK;
@@ -19,7 +23,7 @@ static kern_status_t kext_query_name(struct object *obj, char out[OBJECT_NAME_MA
static kern_status_t kext_destroy(struct object *obj)
{
struct kext *kext = object_data(obj);
struct kext *kext = KEXT_CAST(obj);
if (kext->k_dependencies) {
kfree(kext->k_dependencies);
}
@@ -103,7 +107,7 @@ struct kext *kext_get_by_id(const char *ident)
struct kext *kext = kext_get(ident);
if (kext) {
struct object *kext_obj = object_header(kext);
struct object *kext_obj = &kext->k_base;
object_ref(kext_obj);
}
@@ -126,12 +130,12 @@ struct kext *kext_alloc(void)
return NULL;
}
return object_data(kext_obj);
return KEXT_CAST(kext_obj);
}
void kext_release(struct kext *kext)
{
object_deref(object_header(kext));
object_deref(&kext->k_base);
}
kern_status_t kext_register(struct kext *kext)
@@ -145,8 +149,8 @@ kern_status_t kext_register(struct kext *kext)
return KERN_NAME_EXISTS;
}
struct object *kext_obj = object_header(kext);
object_ref(object_header(kext));
struct object *kext_obj = &kext->k_base;
object_ref(kext_obj);
kext_add(kext);
set_add_object(kext_set, kext_obj);