- //FIXME: if receive is posted with a large size, but send is smaller, mailboxes may not match !
- if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres"))
+
+ if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres")){
+ //We have to check both mailboxes (because SSEND messages are sent to the large mbox). begin with the more appropriate one : the small one.
+ mailbox = smpi_process_mailbox_small();
+ XBT_DEBUG("Is there a corresponding send already posted in the small mailbox %p (in case of SSEND)?", mailbox);
+ XBT_DEBUG("Is there a corresponding send already posted the small mailbox %p (in case of SSEND)?", mailbox);
+ smx_synchro_t action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
+
+ if(action ==NULL){
+ mailbox = smpi_process_mailbox();
+ XBT_DEBUG("No, nothing in the small mailbox test the other one : %p", mailbox);
+ action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
+ if(action ==NULL){
+ XBT_DEBUG("Still nothing, switch back to the small mailbox : %p", mailbox);
+ XBT_DEBUG("Still notching, switch back to the small mailbox : %p", mailbox);
+ mailbox = smpi_process_mailbox_small();
+ }
+ }else{
+ XBT_DEBUG("yes there was something for us in the large mailbox");
+ }
+ }else{