summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorarmink <[email protected]>2018-06-12 16:25:40 +0800
committerarmink <[email protected]>2018-06-12 17:10:20 +0800
commit570ae751be861886fe57b353f46793199537ab97 (patch)
treea4bc4c5f4a7b12c5699a8ac061200742533e2410 /components
parentbce30adddb51e613c29b2bb402b0814ef2969758 (diff)
[components][drivers] Add irq lock to rt_wqueue_wait.
Diffstat (limited to 'components')
-rw-r--r--components/drivers/src/waitqueue.c10
1 files 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;
}
-