@@ -2664,23 +2664,21 @@ static rt_err_t _rt_mb_send_wait(rt_mailbox_t mb,
26642664 }
26652665 }
26662666
2667+ if (mb -> entry >= RT_MB_ENTRY_MAX )
2668+ {
2669+ rt_spin_unlock_irqrestore (& (mb -> spinlock ), level );
2670+ return - RT_EFULL ; /* value overflowed */
2671+ }
2672+
26672673 /* set ptr */
26682674 mb -> msg_pool [mb -> in_offset ] = value ;
26692675 /* increase input offset */
26702676 ++ mb -> in_offset ;
26712677 if (mb -> in_offset >= mb -> size )
26722678 mb -> in_offset = 0 ;
26732679
2674- if (mb -> entry < RT_MB_ENTRY_MAX )
2675- {
2676- /* increase message entry */
2677- mb -> entry ++ ;
2678- }
2679- else
2680- {
2681- rt_spin_unlock_irqrestore (& (mb -> spinlock ), level );
2682- return - RT_EFULL ; /* value overflowed */
2683- }
2680+ /* increase message entry */
2681+ mb -> entry ++ ;
26842682
26852683 /* resume suspended thread */
26862684 if (!rt_list_isempty (& mb -> parent .suspend_thread ))
@@ -3506,6 +3504,16 @@ static rt_err_t _rt_mq_send_wait(rt_mq_t mq,
35063504
35073505 /* disable interrupt */
35083506 level = rt_spin_lock_irqsave (& (mq -> spinlock ));
3507+
3508+ if (mq -> entry >= RT_MQ_ENTRY_MAX )
3509+ {
3510+ /* return message to free list */
3511+ msg -> next = (struct rt_mq_message * )mq -> msg_queue_free ;
3512+ mq -> msg_queue_free = msg ;
3513+ rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3514+ return - RT_EFULL ; /* value overflowed */
3515+ }
3516+
35093517#ifdef RT_USING_MESSAGEQUEUE_PRIORITY
35103518 msg -> prio = prio ;
35113519 if (mq -> msg_queue_head == RT_NULL )
@@ -3547,16 +3555,8 @@ static rt_err_t _rt_mq_send_wait(rt_mq_t mq,
35473555 mq -> msg_queue_head = msg ;
35483556#endif
35493557
3550- if (mq -> entry < RT_MQ_ENTRY_MAX )
3551- {
3552- /* increase message entry */
3553- mq -> entry ++ ;
3554- }
3555- else
3556- {
3557- rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3558- return - RT_EFULL ; /* value overflowed */
3559- }
3558+ /* increase message entry */
3559+ mq -> entry ++ ;
35603560
35613561 /* resume suspended thread */
35623562 if (!rt_list_isempty (& mq -> parent .suspend_thread ))
@@ -3697,6 +3697,15 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size)
36973697
36983698 level = rt_spin_lock_irqsave (& (mq -> spinlock ));
36993699
3700+ if (mq -> entry >= RT_MQ_ENTRY_MAX )
3701+ {
3702+ /* return message to free list */
3703+ msg -> next = (struct rt_mq_message * )mq -> msg_queue_free ;
3704+ mq -> msg_queue_free = msg ;
3705+ rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3706+ return - RT_EFULL ; /* value overflowed */
3707+ }
3708+
37003709 /* link msg to the beginning of message queue */
37013710 msg -> next = (struct rt_mq_message * )mq -> msg_queue_head ;
37023711 mq -> msg_queue_head = msg ;
@@ -3705,16 +3714,8 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size)
37053714 if (mq -> msg_queue_tail == RT_NULL )
37063715 mq -> msg_queue_tail = msg ;
37073716
3708- if (mq -> entry < RT_MQ_ENTRY_MAX )
3709- {
3710- /* increase message entry */
3711- mq -> entry ++ ;
3712- }
3713- else
3714- {
3715- rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3716- return - RT_EFULL ; /* value overflowed */
3717- }
3717+ /* increase message entry */
3718+ mq -> entry ++ ;
37183719
37193720 /* resume suspended thread */
37203721 if (!rt_list_isempty (& mq -> parent .suspend_thread ))
0 commit comments