check five times the receive buffers because a remote interrupt could pass the mail

This commit is contained in:
Stefan Lankes 2011-11-29 03:22:01 -08:00
parent ef750e1c31
commit 54b1c3e6ac

View file

@ -207,25 +207,28 @@ int iRCCE_mail_check(int sender) {
return iRCCE_MAILBOX_CLOSED;
}
RC_cache_invalidate();
if( iRCCE_mailbox_recv[sender]->sent ) {
/* disable interrupts */
flags = irq_nested_disable();
iRCCE_mail_fetch(sender);
// reset senders flag
for(i=0; i<5; i++) {
RC_cache_invalidate();
*(iRCCE_mailbox_recv[sender]) = dummy_header;
/* enable interrupts */
irq_nested_enable(flags);
if( iRCCE_mailbox_recv[sender]->sent ) {
/* disable interrupts */
flags = irq_nested_disable();
return iRCCE_SUCCESS;
} else {
return iRCCE_MAILBOX_EMPTY;
iRCCE_mail_fetch(sender);
// reset senders flag
RC_cache_invalidate();
*(iRCCE_mailbox_recv[sender]) = dummy_header;
/* enable interrupts */
irq_nested_enable(flags);
return iRCCE_SUCCESS;
}
NOP8;
}
return iRCCE_MAILBOX_EMPTY;
}
//------------------------------------------------------------------------------