Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[simix] Wrap (xbt_main_func_t, argc, argv) in a std::function everywhere
[simgrid.git] / src / simix / smx_network.cpp
index 51a5ab7..569d72f 100644 (file)
@@ -84,7 +84,7 @@ void SIMIX_mbox_set_receiver(smx_mailbox_t mbox, smx_process_t process)
 /**
  *  \brief Pushes a communication synchro into a rendez-vous point
  *  \param mbox The mailbox
- *  \param comm The communication synchro
+ *  \param synchro The communication synchro
  */
 static inline void SIMIX_mbox_push(smx_mailbox_t mbox, smx_synchro_t synchro)
 {
@@ -97,7 +97,7 @@ static inline void SIMIX_mbox_push(smx_mailbox_t mbox, smx_synchro_t synchro)
 /**
  *  \brief Removes a communication synchro from a rendez-vous point
  *  \param mbox The rendez-vous point
- *  \param comm The communication synchro
+ *  \param synchro The communication synchro
  */
 void SIMIX_mbox_remove(smx_mailbox_t mbox, smx_synchro_t synchro)
 {
@@ -155,7 +155,7 @@ static smx_synchro_t _find_matching_comm(std::deque<smx_synchro_t> *deque, e_smx
 /******************************************************************************/
 /*                          Communication synchros                            */
 /******************************************************************************/
-void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_process_t src, smx_mailbox_t mbox,
+XBT_PRIVATE void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_process_t src, smx_mailbox_t mbox,
                                   double task_size, double rate,
                                   void *src_buff, size_t src_buff_size,
                                   int (*match_fun)(void *, void *,smx_synchro_t),
@@ -167,7 +167,7 @@ void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_process_t src, smx_mai
   SIMCALL_SET_MC_VALUE(simcall, 0);
   simcall_HANDLER_comm_wait(simcall, comm, timeout);
 }
-smx_synchro_t simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx_process_t src_proc, smx_mailbox_t mbox,
+XBT_PRIVATE smx_synchro_t simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx_process_t src_proc, smx_mailbox_t mbox,
                                   double task_size, double rate,
                                   void *src_buff, size_t src_buff_size,
                                   int (*match_fun)(void *, void *,smx_synchro_t),
@@ -215,11 +215,9 @@ smx_synchro_t simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx_process_t sr
   }
   xbt_fifo_push(src_proc->comms, other_synchro);
 
-  /* if the communication synchro is detached then decrease the refcount
-   * by one, so it will be eliminated by the receiver's destroy call */
+
   if (detached) {
     other_comm->detached = true;
-    other_comm->ref();
     other_comm->clean_fun = clean_fun;
   } else {
     other_comm->clean_fun = NULL;
@@ -246,7 +244,7 @@ smx_synchro_t simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx_process_t sr
   return (detached ? NULL : other_comm);
 }
 
-void simcall_HANDLER_comm_recv(smx_simcall_t simcall, smx_process_t receiver, smx_mailbox_t mbox,
+XBT_PRIVATE void simcall_HANDLER_comm_recv(smx_simcall_t simcall, smx_process_t receiver, smx_mailbox_t mbox,
                          void *dst_buff, size_t *dst_buff_size,
                          int (*match_fun)(void *, void *, smx_synchro_t),
                          void (*copy_data_fun)(smx_synchro_t, void*, size_t),
@@ -257,7 +255,7 @@ void simcall_HANDLER_comm_recv(smx_simcall_t simcall, smx_process_t receiver, sm
   simcall_HANDLER_comm_wait(simcall, comm, timeout);
 }
 
-smx_synchro_t simcall_HANDLER_comm_irecv(smx_simcall_t simcall, smx_process_t receiver, smx_mailbox_t mbox,
+XBT_PRIVATE smx_synchro_t simcall_HANDLER_comm_irecv(smx_simcall_t simcall, smx_process_t receiver, smx_mailbox_t mbox,
     void *dst_buff, size_t *dst_buff_size,
     int (*match_fun)(void *, void *, smx_synchro_t),
     void (*copy_data_fun)(smx_synchro_t, void*, size_t),
@@ -552,10 +550,10 @@ static inline void SIMIX_comm_start(smx_synchro_t synchro)
     if (SIMIX_process_is_suspended(comm->src_proc) || SIMIX_process_is_suspended(comm->dst_proc)) {
       if (SIMIX_process_is_suspended(comm->src_proc))
         XBT_DEBUG("The communication is suspended on startup because src (%s@%s) was suspended since it initiated the communication",
-            comm->src_proc->name, sg_host_get_name(comm->src_proc->host));
+            comm->src_proc->name.c_str(), sg_host_get_name(comm->src_proc->host));
       else
         XBT_DEBUG("The communication is suspended on startup because dst (%s@%s) was suspended since it initiated the communication",
-            comm->dst_proc->name, sg_host_get_name(comm->dst_proc->host));
+            comm->dst_proc->name.c_str(), sg_host_get_name(comm->dst_proc->host));
 
       comm->surf_comm->suspend();
     }
@@ -637,7 +635,7 @@ void SIMIX_comm_finish(smx_synchro_t synchro)
                 synchro,
                 comm->src_proc ? sg_host_get_name(comm->src_proc->host) : NULL,
                 comm->dst_proc ? sg_host_get_name(comm->dst_proc->host) : NULL,
-                simcall->issuer->name, simcall->issuer, comm->detached);
+                simcall->issuer->name.c_str(), simcall->issuer, comm->detached);
       if (comm->src_proc == simcall->issuer) {
         XBT_DEBUG("I'm source");
       } else if (comm->dst_proc == simcall->issuer) {
@@ -683,6 +681,8 @@ void SIMIX_comm_finish(smx_synchro_t synchro)
       if(simcall->issuer == comm->dst_proc){
         if(comm->src_proc)
           xbt_fifo_remove(comm->src_proc->comms, synchro);
+        //in case of a detached comm we have an extra ref to remove, as the sender won't do it
+        destroy_count++;
       }
     }
     SIMIX_simcall_answer(simcall);