From: Augustin Degomme Date: Tue, 2 Dec 2014 14:50:12 +0000 (+0100) Subject: Avoid using simcalls here, as by descheduling the process, we could misplace some... X-Git-Tag: v3_12~732^2~168 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/63ba498484d4fcfc706be1e514d7fedbc6c9f4be Avoid using simcalls here, as by descheduling the process, we could misplace some messages in mailboxes, and end up deadlocking. Calling directly SIMIX functions is not really the best, but it may fix a bad heisenbug --- diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index e76bdc1c3b..57ae7e0b0f 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -349,16 +349,14 @@ void smpi_mpi_start(MPI_Request request) //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); + smx_synchro_t action = SIMIX_comm_iprobe(SIMIX_process_self(), 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); + action = SIMIX_comm_iprobe(SIMIX_process_self(), 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{ @@ -367,7 +365,7 @@ void smpi_mpi_start(MPI_Request request) }else{ mailbox = smpi_process_mailbox_small(); XBT_DEBUG("Is there a corresponding send already posted the small mailbox?"); - smx_synchro_t action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request); + smx_synchro_t action = SIMIX_comm_iprobe(SIMIX_process_self(), mailbox, 0, request->src,request->tag, &match_recv, (void*)request); if(action ==NULL){ XBT_DEBUG("No, nothing in the permanent receive mailbox"); @@ -424,7 +422,7 @@ void smpi_mpi_start(MPI_Request request) if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres")) { // eager mode mailbox = smpi_process_remote_mailbox(receiver); XBT_DEBUG("Is there a corresponding recv already posted in the large mailbox %p?", mailbox); - smx_synchro_t action = simcall_comm_iprobe(mailbox, 1,request->dst, request->tag, &match_send, (void*)request); + smx_synchro_t action = SIMIX_comm_iprobe(SIMIX_process_self(), mailbox, 1,request->dst, request->tag, &match_send, (void*)request); if(action ==NULL){ if (! (request->flags & SSEND)){ mailbox = smpi_process_remote_mailbox_small(receiver); @@ -432,7 +430,7 @@ void smpi_mpi_start(MPI_Request request) } else{ mailbox = smpi_process_remote_mailbox_small(receiver); XBT_DEBUG("SSEND : Is there a corresponding recv already posted in the small mailbox %p?", mailbox); - action = simcall_comm_iprobe(mailbox, 1,request->dst, request->tag, &match_send, (void*)request); + action = SIMIX_comm_iprobe(SIMIX_process_self(), mailbox, 1,request->dst, request->tag, &match_send, (void*)request); if(action ==NULL){ XBT_DEBUG("No, we are first, send to large mailbox"); mailbox = smpi_process_remote_mailbox(receiver);