obj: add header-offset field to object_type

this allows the object header to be placed anywhere within the larger
object structure.

the object system now also ensures that the object is zero-initialised
during allocation.
This commit is contained in:
2023-05-06 22:22:05 +01:00
parent d8de0ddfe4
commit a79d109fcc
7 changed files with 12 additions and 2 deletions

View File

@@ -33,6 +33,7 @@ static kern_status_t ns_get_child_named(struct object *obj, const char *name, st
static struct object_type ns_type = {
.ob_name = "namespace",
.ob_size = sizeof(struct object_namespace),
.ob_header_offset = offsetof(struct object_namespace, ns_base),
.ob_ops = {
.query_name = ns_query_name,
.get_named = ns_get_child_named,

View File

@@ -48,11 +48,15 @@ struct object *object_create(struct object_type *type)
}
struct vm_cache *cache = &type->ob_cache;
struct object *obj = vm_cache_alloc(cache, 0);
if (!obj) {
void *obj_buf = vm_cache_alloc(cache, 0);
if (!obj_buf) {
return NULL;
}
memset(obj_buf, 0x00, type->ob_size);
struct object *obj = (struct object *)((unsigned char *)obj_buf + type->ob_header_offset);
obj->ob_type = type;
obj->ob_lock = SPIN_LOCK_INIT;
obj->ob_magic = OBJECT_MAGIC;

View File

@@ -58,6 +58,7 @@ static kern_status_t set_get_child_named(struct object *obj, const char *name, s
static struct object_type set_type = {
.ob_name = "set",
.ob_size = sizeof(struct set),
.ob_header_offset = offsetof(struct set, s_base),
.ob_ops = {
.query_name = set_query_name,
.get_named = set_get_child_named,