Nucleus
Barry Object Lists + replacing Task Queues 4d3c382 (3 years, 3 months ago)
diff --git a/object/manager.c b/object/manager.c
index a330d15..124ebbc 100644
--- a/object/manager.c
+++ b/object/manager.c
@@ -7,6 +7,8 @@
*/
#include <nucleus/object.h>
+#include <nucleus/memory.h>
+#include <nucleus/panic.h>
void acquire(Spinlock *lock);
void release(Spinlock *lock);
@@ -30,14 +32,25 @@ put(void *addr)
if (__atomic_sub_fetch(&obj->usage, 1, __ATOMIC_RELAXED))
return;
__atomic_sub_fetch(&obj->type->count, 1, __ATOMIC_RELAXED);
- obj->type->delete(obj);
+ if (obj->type->delete)
+ obj->type->delete(obj);
+ if (obj->type->free)
+ obj->type->free(obj);
+ else
+ kfree(obj);
}
/* Create a new instance of an object */
void *
new(ObjectType *type)
{
- Object *obj = type->new();
+ Object *obj;
+ if (type->alloc)
+ obj = type->alloc();
+ else
+ obj = kmalloc(type->size);
+ if (type->new)
+ type->new(obj);
obj->type = type;
__atomic_add_fetch(&type->count, 1, __ATOMIC_RELAXED);
return get(obj);