mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 20:58:22 +00:00
semaphore: introduce a semaphore_reset helper
This simply clears the internal counter of a semaphore.
This commit is contained in:
@@ -27,6 +27,7 @@ typedef struct semaphore_t{
|
||||
int semaphore_wait(semaphore_t *sem, bool interruptible);
|
||||
int semaphore_timedwait(semaphore_t *sem, time_t timeoutusec, bool interruptible);
|
||||
void semaphore_signal(semaphore_t *sem);
|
||||
void semaphore_reset(semaphore_t *sem);
|
||||
bool semaphore_test(semaphore_t *sem);
|
||||
bool semaphore_haswaiters(semaphore_t *sem);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user