diff --git a/arch/x86/scc/iRCCE_mailbox.c b/arch/x86/scc/iRCCE_mailbox.c index f968b6d1..36553505 100644 --- a/arch/x86/scc/iRCCE_mailbox.c +++ b/arch/x86/scc/iRCCE_mailbox.c @@ -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; } //------------------------------------------------------------------------------