summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ipc.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/ipc.c b/src/ipc.c
index 2721d8591e..664237ef4c 100644
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -1197,6 +1197,7 @@ rt_err_t rt_mb_init(rt_mailbox_t mb, const char* name, void* msgpool, rt_size_t
mb->in_offset = 0;
mb->out_offset = 0;
+ /* init an additional list of sender suspend thread */
rt_list_init(&(mb->suspend_sender_thread));
return RT_EOK;
@@ -1263,6 +1264,9 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag)
mb->in_offset = 0;
mb->out_offset = 0;
+ /* init an additional list of sender suspend thread */
+ rt_list_init(&(mb->suspend_sender_thread));
+
return mb;
}
@@ -1274,12 +1278,13 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag)
* @return the error code
*/
rt_err_t rt_mb_delete (rt_mailbox_t mb)
-{
+{
/* parameter check */
RT_ASSERT(mb != RT_NULL);
/* resume all suspended thread */
rt_ipc_list_resume_all(&(mb->parent.suspend_thread));
+
/* also resume all mailbox private suspended thread */
rt_ipc_list_resume_all(&(mb->suspend_sender_thread));
@@ -1576,6 +1581,9 @@ rt_err_t rt_mb_control(rt_mailbox_t mb, rt_uint8_t cmd, void* arg)
/* resume all waiting thread */
rt_ipc_list_resume_all(&(mb->parent.suspend_thread));
+ /* also resume all mailbox private suspended thread */
+ rt_ipc_list_resume_all(&(mb->suspend_sender_thread));
+
/* re-init mailbox */
mb->entry = 0;
mb->in_offset = 0;