mbox->wait_send++;
sys_sem_signal(&(mbox->mutex));
sys_arch_sem_wait(&(mbox->mail), 0);
- sys_arch_sem_wait(&(mbox->mutex), 0);
+ status = sys_arch_sem_wait(&(mbox->mutex), 0);
mbox->wait_send--;
+ if (status == SYS_ARCH_CANCELED) {
+ return;
+ }
}
- mbox->msgs[mbox->rear] = msg;
- LWIP_DEBUGF(SYS_DEBUG, ("Post SUCCESS\n"));
if (mbox->rear == mbox->front) {
first_msg = 1;
} else {
sys_arch_sem_wait(&(mbox->mail), 0);
}
- sys_arch_sem_wait(&(mbox->mutex), 0);
+ status = sys_arch_sem_wait(&(mbox->mutex), 0);
mbox->wait_fetch--;
+ if (status == SYS_ARCH_CANCELED) {
+ return SYS_ARCH_CANCELED;
+ }
}
+ mbox->front = (mbox->front + 1) % mbox->queue_size;
if (msg != NULL) {
*msg = mbox->msgs[mbox->front];
LWIP_DEBUGF(SYS_DEBUG, (" mbox %p msg %p\n", (void *)mbox, *msg));