From a6b2b03c8d5b90004cd53819029e7cab4f33d307 Mon Sep 17 00:00:00 2001 From: Mihai Renea Date: Thu, 24 Oct 2024 09:37:22 +0200 Subject: [PATCH] core/cond.c: cond_wait() expect enabled interrupts --- core/cond.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/cond.c b/core/cond.c index 8ff45f4d7461..f3e582446ede 100644 --- a/core/cond.c +++ b/core/cond.c @@ -34,19 +34,19 @@ void cond_init(cond_t *cond) void cond_wait(cond_t *cond, mutex_t *mutex) { - unsigned irqstate = irq_disable(); + assert(irq_is_enabled()); + irq_disable(); thread_t *me = thread_get_active(); - mutex_unlock(mutex); sched_set_status(me, STATUS_COND_BLOCKED); thread_add_to_list(&cond->queue, me); - irq_restore(irqstate); + irq_enable(); + /* mutex_unlock() might reschedule, so it needs to be called with interrupts + * enabled. */ + mutex_unlock(mutex); thread_yield_higher(); - - /* - * Once we reach this point, the condition variable was signalled, - * and we are free to continue. - */ + /* Once we reach this point, the condition variable was signaled, and we are + * free to continue. */ mutex_lock(mutex); }