BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 4d3c382801026ca46da937de6d7261f1f6805d9e / object / manager.c

// Related

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);