Skip to content

Commit 9248169

Browse files
authored
Merge pull request #11976 from pstolarz/lwip_mbox_fix
LWIP system mailbox overflow fix
2 parents 083f651 + 9a70621 commit 9248169

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

features/lwipstack/lwip-sys/arch/lwip_sys_arch.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,11 @@ void sys_mbox_post(sys_mbox_t *mbox, void *msg) {
174174

175175
int state = osKernelLock();
176176

177-
mbox->queue[mbox->post_idx % MB_SIZE] = msg;
178-
mbox->post_idx += 1;
177+
mbox->queue[mbox->post_idx] = msg;
178+
mbox->post_idx = (mbox->post_idx + 1) % MB_SIZE;
179179

180180
osEventFlagsSet(mbox->id, SYS_MBOX_FETCH_EVENT);
181-
if (mbox->post_idx - mbox->fetch_idx == MB_SIZE-1)
181+
if ((mbox->post_idx + 1) % MB_SIZE == mbox->fetch_idx)
182182
osEventFlagsClear(mbox->id, SYS_MBOX_POST_EVENT);
183183

184184
osKernelRestoreLock(state);
@@ -207,11 +207,11 @@ err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) {
207207

208208
int state = osKernelLock();
209209

210-
mbox->queue[mbox->post_idx % MB_SIZE] = msg;
211-
mbox->post_idx += 1;
210+
mbox->queue[mbox->post_idx] = msg;
211+
mbox->post_idx = (mbox->post_idx + 1) % MB_SIZE;
212212

213213
osEventFlagsSet(mbox->id, SYS_MBOX_FETCH_EVENT);
214-
if (mbox->post_idx - mbox->fetch_idx == MB_SIZE-1)
214+
if ((mbox->post_idx + 1) % MB_SIZE == mbox->fetch_idx)
215215
osEventFlagsClear(mbox->id, SYS_MBOX_POST_EVENT);
216216

217217
osKernelRestoreLock(state);
@@ -261,8 +261,8 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) {
261261
int state = osKernelLock();
262262

263263
if (msg)
264-
*msg = mbox->queue[mbox->fetch_idx % MB_SIZE];
265-
mbox->fetch_idx += 1;
264+
*msg = mbox->queue[mbox->fetch_idx];
265+
mbox->fetch_idx = (mbox->fetch_idx + 1) % MB_SIZE;
266266

267267
osEventFlagsSet(mbox->id, SYS_MBOX_POST_EVENT);
268268
if (mbox->post_idx == mbox->fetch_idx)
@@ -297,8 +297,8 @@ u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) {
297297
int state = osKernelLock();
298298

299299
if (msg)
300-
*msg = mbox->queue[mbox->fetch_idx % MB_SIZE];
301-
mbox->fetch_idx += 1;
300+
*msg = mbox->queue[mbox->fetch_idx];
301+
mbox->fetch_idx = (mbox->fetch_idx + 1) % MB_SIZE;
302302

303303
osEventFlagsSet(mbox->id, SYS_MBOX_POST_EVENT);
304304
if (mbox->post_idx == mbox->fetch_idx)

0 commit comments

Comments
 (0)