summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormysterywolf <[email protected]>2020-10-11 17:54:39 +0800
committermysterywolf <[email protected]>2020-10-11 17:54:39 +0800
commit2469335e213d6f2875d0b61575ceebd1f2a26509 (patch)
treec140996cddfb452077bd0132687c35867c5114c0 /src
parent13044b1e290a3aef4e57c3d443da1c571d33789d (diff)
[fix bug] #3951
Diffstat (limited to 'src')
-rw-r--r--src/ipc.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/ipc.c b/src/ipc.c
index 5646fc7f40..dc347119ae 100644
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -35,7 +35,9 @@
* 2018-10-02 Bernard add 64bit support for mailbox
* 2019-09-16 tyx add send wait support for message queue
* 2020-07-29 Meco Man fix thread->event_set/event_info when received an
- event without pending
+ * event without pending
+ * 2020-10-11 Meco Man add semaphore values' overflow-check code
+ * in the function of rt_sem_release
*/
#include <rtthread.h>
@@ -463,7 +465,17 @@ rt_err_t rt_sem_release(rt_sem_t sem)
need_schedule = RT_TRUE;
}
else
- sem->value ++; /* increase value */
+ {
+ if(sem->value < 65535u)
+ {
+ sem->value ++; /* increase value */
+ }
+ else
+ {
+ rt_hw_interrupt_enable(temp); /* enable interrupt */
+ return -RT_EFULL; /* value overflowed */
+ }
+ }
/* enable interrupt */
rt_hw_interrupt_enable(temp);