From 570ae751be861886fe57b353f46793199537ab97 Mon Sep 17 00:00:00 2001 From: armink Date: Tue, 12 Jun 2018 16:25:40 +0800 Subject: [PATCH] [components][drivers] Add irq lock to rt_wqueue_wait. --- components/drivers/src/waitqueue.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/components/drivers/src/waitqueue.c b/components/drivers/src/waitqueue.c index a5be7eb36e..7fff2d3825 100644 --- a/components/drivers/src/waitqueue.c +++ b/components/drivers/src/waitqueue.c @@ -65,6 +65,10 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec) rt_thread_t tid = rt_current_thread; rt_timer_t tmr = &(tid->thread_timer); struct rt_wqueue_node __wait; + rt_base_t level; + + /* current context checking */ + RT_DEBUG_NOT_IN_INTERRUPT; tick = rt_tick_from_millisecond(msec); @@ -76,10 +80,8 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec) __wait.wakeup = __wqueue_default_wake; rt_list_init(&__wait.list); + level = rt_hw_interrupt_disable(); rt_wqueue_add(queue, &__wait); - - /* current context checking */ - RT_DEBUG_NOT_IN_INTERRUPT; rt_thread_suspend(tid); /* start timer */ @@ -91,6 +93,7 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec) rt_timer_start(tmr); } + rt_hw_interrupt_enable(level); rt_schedule(); @@ -98,4 +101,3 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec) return 0; } -