summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ipc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/ipc.c b/src/ipc.c
index d97fa1d35a..b6bf08770d 100644
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -1770,6 +1770,7 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set)
rt_base_t level;
rt_base_t status;
rt_bool_t need_schedule;
+ rt_uint32_t need_clear_set = 0;
/* parameter check */
RT_ASSERT(event != RT_NULL);
@@ -1833,7 +1834,7 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set)
{
/* clear event */
if (thread->event_info & RT_EVENT_FLAG_CLEAR)
- event->set &= ~thread->event_set;
+ need_clear_set |= thread->event_set;
/* resume thread, and thread list breaks out */
rt_thread_resume(thread);
@@ -1843,6 +1844,10 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set)
need_schedule = RT_TRUE;
}
}
+ if (need_clear_set)
+ {
+ event->set &= ~need_clear_set;
+ }
}
/* enable interrupt */