@@ -2661,23 +2661,21 @@ static rt_err_t _rt_mb_send_wait(rt_mailbox_t mb,
26612661 }
26622662 }
26632663
2664+ if (mb -> entry >= RT_MB_ENTRY_MAX )
2665+ {
2666+ rt_spin_unlock_irqrestore (& (mb -> spinlock ), level );
2667+ return - RT_EFULL ; /* value overflowed */
2668+ }
2669+
26642670 /* set ptr */
26652671 mb -> msg_pool [mb -> in_offset ] = value ;
26662672 /* increase input offset */
26672673 ++ mb -> in_offset ;
26682674 if (mb -> in_offset >= mb -> size )
26692675 mb -> in_offset = 0 ;
26702676
2671- if (mb -> entry < RT_MB_ENTRY_MAX )
2672- {
2673- /* increase message entry */
2674- mb -> entry ++ ;
2675- }
2676- else
2677- {
2678- rt_spin_unlock_irqrestore (& (mb -> spinlock ), level );
2679- return - RT_EFULL ; /* value overflowed */
2680- }
2677+ /* increase message entry */
2678+ mb -> entry ++ ;
26812679
26822680 /* resume suspended thread */
26832681 if (!rt_list_isempty (& mb -> parent .suspend_thread ))
@@ -3503,6 +3501,16 @@ static rt_err_t _rt_mq_send_wait(rt_mq_t mq,
35033501
35043502 /* disable interrupt */
35053503 level = rt_spin_lock_irqsave (& (mq -> spinlock ));
3504+
3505+ if (mq -> entry >= RT_MQ_ENTRY_MAX )
3506+ {
3507+ /* return message to free list */
3508+ msg -> next = (struct rt_mq_message * )mq -> msg_queue_free ;
3509+ mq -> msg_queue_free = msg ;
3510+ rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3511+ return - RT_EFULL ; /* value overflowed */
3512+ }
3513+
35063514#ifdef RT_USING_MESSAGEQUEUE_PRIORITY
35073515 msg -> prio = prio ;
35083516 if (mq -> msg_queue_head == RT_NULL )
@@ -3544,16 +3552,8 @@ static rt_err_t _rt_mq_send_wait(rt_mq_t mq,
35443552 mq -> msg_queue_head = msg ;
35453553#endif
35463554
3547- if (mq -> entry < RT_MQ_ENTRY_MAX )
3548- {
3549- /* increase message entry */
3550- mq -> entry ++ ;
3551- }
3552- else
3553- {
3554- rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3555- return - RT_EFULL ; /* value overflowed */
3556- }
3555+ /* increase message entry */
3556+ mq -> entry ++ ;
35573557
35583558 /* resume suspended thread */
35593559 if (!rt_list_isempty (& mq -> parent .suspend_thread ))
@@ -3694,6 +3694,15 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size)
36943694
36953695 level = rt_spin_lock_irqsave (& (mq -> spinlock ));
36963696
3697+ if (mq -> entry >= RT_MQ_ENTRY_MAX )
3698+ {
3699+ /* return message to free list */
3700+ msg -> next = (struct rt_mq_message * )mq -> msg_queue_free ;
3701+ mq -> msg_queue_free = msg ;
3702+ rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3703+ return - RT_EFULL ; /* value overflowed */
3704+ }
3705+
36973706 /* link msg to the beginning of message queue */
36983707 msg -> next = (struct rt_mq_message * )mq -> msg_queue_head ;
36993708 mq -> msg_queue_head = msg ;
@@ -3702,16 +3711,8 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size)
37023711 if (mq -> msg_queue_tail == RT_NULL )
37033712 mq -> msg_queue_tail = msg ;
37043713
3705- if (mq -> entry < RT_MQ_ENTRY_MAX )
3706- {
3707- /* increase message entry */
3708- mq -> entry ++ ;
3709- }
3710- else
3711- {
3712- rt_spin_unlock_irqrestore (& (mq -> spinlock ), level );
3713- return - RT_EFULL ; /* value overflowed */
3714- }
3714+ /* increase message entry */
3715+ mq -> entry ++ ;
37153716
37163717 /* resume suspended thread */
37173718 if (!rt_list_isempty (& mq -> parent .suspend_thread ))
0 commit comments