Nucleus
Barry Global object lists 5be6a64 (3 years, 3 months ago)diff --git a/object/manager.c b/object/manager.c index 124ebbc..c50d45d 100644 --- a/object/manager.c +++ b/object/manager.c @@ -10,6 +10,7 @@ #include <nucleus/memory.h> #include <nucleus/panic.h> +void init_lock(Spinlock *lock); void acquire(Spinlock *lock); void release(Spinlock *lock); @@ -34,6 +35,7 @@ put(void *addr) __atomic_sub_fetch(&obj->type->count, 1, __ATOMIC_RELAXED); if (obj->type->delete) obj->type->delete(obj); + remove(obj->type->objects, obj); if (obj->type->free) obj->type->free(obj); else @@ -51,6 +53,10 @@ new(ObjectType *type) obj = kmalloc(type->size); if (type->new) type->new(obj); + if (!type->objects) + type->objects = create_list(type); + add(type->objects, obj); + init_lock(&obj->lock); obj->type = type; __atomic_add_fetch(&type->count, 1, __ATOMIC_RELAXED); return get(obj);