BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 5be6a64670a09857d2128737723e0b5d4021271e / object

// Related

Nucleus

Barry Global object lists 5be6a64 (3 years, 3 months ago)
diff --git a/object/list.c b/object/list.c
index 75725e5..3e9b96b 100644
--- a/object/list.c
+++ b/object/list.c
@@ -22,6 +22,7 @@ struct ObjectList {
 	Spinlock lock;
 };
 
+void init_lock(Spinlock *lock);
 void acquire(Spinlock *lock);
 void release(Spinlock *lock);
 
@@ -30,6 +31,7 @@ ObjectList *
 create_list(ObjectType *type)
 {
 	ObjectList *list = kmalloc(sizeof(ObjectList));
+	init_lock(&list->lock);
 	list->type = type;
 	return list;
 }
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);