From dcf66e778501d188162b025c03df8236902c6975 Mon Sep 17 00:00:00 2001 From: user Date: Tue, 2 Dec 2025 17:10:23 +0100 Subject: [PATCH] destroy added --- kernel/sync/semaphore.h | 2 +- kernel/syscall/skeleton.cc | 25 ++++++++++++++++++++----- kernel/syscall/skeleton.h | 6 +++--- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/kernel/sync/semaphore.h b/kernel/sync/semaphore.h index 9355ee1..17b3655 100644 --- a/kernel/sync/semaphore.h +++ b/kernel/sync/semaphore.h @@ -33,7 +33,7 @@ class Semaphore { */ explicit Semaphore(unsigned c = 0) : counter(c) {} unsigned counter; - + bool used; /*! \brief Wait for access to the critical area. * * Enter/decrement/wait operation: If the counter is greater than 0, then diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index 1f780a0..b27aeae 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -49,23 +49,38 @@ bool sem_init(Vault &vault, size_t id, uint32_t value) { if (id >= vault.MAX_SEMS) { return false; // out‐of‐range id } + if (vault.sems[id].used==1){ + return false; //already in use + } + vault.sems[id].counter=value; return true; } -void sem_destroy(Vault &vault, size_t id) { - (void)vault; - (void)id; +bool sem_destroy(Vault &vault, size_t id) { + if (id >= vault.MAX_SEMS) { + return false; // out‐of‐range id + } + if (vault.sems[id].used==0){ + return false; //already in free + } + + vault.sems[id].used=0; + vault.sems[id].counter=0; + return true; } -void sem_signal(Vault &vault, size_t id) { +bool sem_signal(Vault &vault, size_t id) { (void)vault; (void)id; + + return true; } -void sem_wait(Vault &vault, size_t id) { +bool sem_wait(Vault &vault, size_t id) { (void)vault; (void)id; + return true; } void exit(Vault &vault) { (void)vault; } diff --git a/kernel/syscall/skeleton.h b/kernel/syscall/skeleton.h index 5f9f831..7ab0464 100644 --- a/kernel/syscall/skeleton.h +++ b/kernel/syscall/skeleton.h @@ -18,9 +18,9 @@ size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size); size_t read(Vault &vault, uint32_t id); void sleep(Vault &vault, size_t ms); bool sem_init(Vault &vault, size_t id, uint32_t value); -void sem_destroy(Vault &vault, size_t id); -void sem_signal(Vault &vault, size_t id); -void sem_wait(Vault &vault, size_t id); +bool sem_destroy(Vault &vault, size_t id); +bool sem_signal(Vault &vault, size_t id); +bool sem_wait(Vault &vault, size_t id); void exit(Vault &vault); void kill(Vault &vault, size_t pid);