semaphore: introduce a semaphore_reset helper

This simply clears the internal counter of a semaphore.
This commit is contained in:
8infy
2024-09-01 19:41:10 +03:00
parent 7136e96fdb
commit f306edb5ec
2 changed files with 8 additions and 0 deletions
+7
View File
@@ -125,6 +125,13 @@ void semaphore_signal(semaphore_t *sem) {
interrupt_set(intstate);
}
void semaphore_reset(semaphore_t *sem) {
bool intstate = spinlock_acquireirqclear(&sem->lock);
__assert(sem->head == NULL);
sem->i = 0;
spinlock_releaseirqrestore(&sem->lock, intstate);
}
bool semaphore_haswaiters(semaphore_t *sem) {
bool intstate = interrupt_set(false);
spinlock_acquire(&sem->lock);