Remove spinlock contexts
All checks were successful
Build documentation / build-and-deploy (push) Successful in 28s

This commit is contained in:
2026-02-08 18:58:53 +01:00
parent 1ca3d11bac
commit 9e6035bd68
26 changed files with 161 additions and 262 deletions

View File

@@ -11,13 +11,13 @@
spin_lock_t _liballoc_lock = SPIN_LOCK_INIT;
int liballoc_lock (void* ctx) {
spin_lock (&_liballoc_lock, (spin_lock_ctx_t*)ctx);
int liballoc_lock (void) {
spin_lock (&_liballoc_lock);
return 0;
}
int liballoc_unlock (void* ctx) {
spin_unlock (&_liballoc_lock, (spin_lock_ctx_t*)ctx);
int liballoc_unlock (void) {
spin_unlock (&_liballoc_lock);
return 0;
}
@@ -243,9 +243,8 @@ void* malloc (size_t size) {
int index;
void* ptr;
struct boundary_tag* tag = NULL;
spin_lock_ctx_t ctxliba;
liballoc_lock (&ctxliba);
liballoc_lock ();
if (l_initialized == 0) {
for (index = 0; index < MAXEXP; index++) {
@@ -273,7 +272,7 @@ void* malloc (size_t size) {
// No page found. Make one.
if (tag == NULL) {
if ((tag = allocate_new_tag (size)) == NULL) {
liballoc_unlock (&ctxliba);
liballoc_unlock ();
return NULL;
}
@@ -306,24 +305,23 @@ void* malloc (size_t size) {
ptr = (void*)((uintptr_t)tag + sizeof (struct boundary_tag));
liballoc_unlock (&ctxliba);
liballoc_unlock ();
return ptr;
}
void free (void* ptr) {
int index;
struct boundary_tag* tag;
spin_lock_ctx_t ctxliba;
if (ptr == NULL)
return;
liballoc_lock (&ctxliba);
liballoc_lock ();
tag = (struct boundary_tag*)((uintptr_t)ptr - sizeof (struct boundary_tag));
if (tag->magic != LIBALLOC_MAGIC) {
liballoc_unlock (&ctxliba); // release the lock
liballoc_unlock (); // release the lock
return;
}
@@ -356,7 +354,7 @@ void free (void* ptr) {
liballoc_free (tag, pages);
liballoc_unlock (&ctxliba);
liballoc_unlock ();
return;
}
@@ -367,7 +365,7 @@ void free (void* ptr) {
insert_tag (tag, index);
liballoc_unlock (&ctxliba);
liballoc_unlock ();
}
void* calloc (size_t nobj, size_t size) {
@@ -387,7 +385,6 @@ void* realloc (void* p, size_t size) {
void* ptr;
struct boundary_tag* tag;
int real_size;
spin_lock_ctx_t ctxliba;
if (size == 0) {
free (p);
@@ -397,11 +394,11 @@ void* realloc (void* p, size_t size) {
return malloc (size);
if (&liballoc_lock != NULL)
liballoc_lock (&ctxliba); // lockit
liballoc_lock (); // lockit
tag = (struct boundary_tag*)((uintptr_t)p - sizeof (struct boundary_tag));
real_size = tag->size;
if (&liballoc_unlock != NULL)
liballoc_unlock (&ctxliba);
liballoc_unlock ();
if ((size_t)real_size > size)
real_size = size;