Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | You Kangren <> | Subject | [PATCH] posix-timers: Release the acquired lock before returning | Date | Mon, 26 Jun 2023 20:00:17 +0800 |
| |
Release the acquired lock before returning to prevent errors
Signed-off-by: You Kangren <youkangren@vivo.com> --- kernel/time/posix-timers.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c index b924f0f096fa..8ab383cba0af 100644 --- a/kernel/time/posix-timers.c +++ b/kernel/time/posix-timers.c @@ -599,6 +599,7 @@ static struct k_itimer *__lock_timer(timer_t timer_id, unsigned long *flags) */ if (timr->it_signal == current->signal) { rcu_read_unlock(); + spin_unlock_irqrestore(&timr->it_lock, *flags); return timr; } spin_unlock_irqrestore(&timr->it_lock, *flags); @@ -1066,9 +1067,10 @@ static void itimer_delete(struct k_itimer *timer) * do_exit() only for the last thread of the thread group. * So no other task can access and delete that timer. */ - if (WARN_ON_ONCE(timer_wait_running(timer, &flags) != timer)) + if (WARN_ON_ONCE(timer_wait_running(timer, &flags) != timer)) { + spin_unlock_irqrestore(&timer->it_lock, flags); return; - + } goto retry_delete; } list_del(&timer->list); -- 2.39.0
| ![\](/images/icornerr.gif) |