Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bounded receive
[simgrid.git] / src / msg / msg_mailbox.c
index 45207d6..e4e633f 100644 (file)
@@ -9,10 +9,6 @@
 #include "msg_mailbox.h"
 #include "msg_private.h"
 
-/** @addtogroup m_mailbox_management
- *  \brief functions to manage mailbox
- */
-
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_mailbox, msg,
                                 "Logging specific to MSG (mailbox)");
 
@@ -45,8 +41,11 @@ int
 MSG_mailbox_get_count_host_waiting_tasks(msg_mailbox_t mailbox,
                                          msg_host_t host)
 {
-  return simcall_rdv_comm_count_by_host(mailbox,
-                                      host->smx_host);
+  return simcall_rdv_comm_count_by_host(mailbox, host);
+}
+
+double MSG_set_rate_before_read(msg_mailbox_t mailbox, double newrate) {
+       return simcall_comm_change_rate_first_action(mailbox,newrate);
 }
 
 msg_mailbox_t MSG_mailbox_get_by_alias(const char *alias)
@@ -60,6 +59,17 @@ msg_mailbox_t MSG_mailbox_get_by_alias(const char *alias)
   return mailbox;
 }
 
+/** \ingroup msg_mailbox_management
+ * \brief Set the mailbox to receive in asynchronous mode
+ *
+ * All messages sent to this mailbox will be transferred to 
+ * the receiver without waiting for the receive call. 
+ * The receive call will still be necessary to use the received data.
+ * If there is a need to receive some messages asynchronously, and some not, 
+ * two different mailboxes should be used.
+ *
+ * \param alias The name of the mailbox 
+ */
 void MSG_mailbox_set_async(const char *alias){
   msg_mailbox_t mailbox = MSG_mailbox_get_by_alias(alias);
 
@@ -68,7 +78,7 @@ void MSG_mailbox_set_async(const char *alias){
 
 }
 
-/* \ingroup m_mailbox_management
+/** \ingroup msg_mailbox_management
  * \brief Get a task from a mailbox on a given host
  *
  * \param mailbox The mailbox where the task was sent
@@ -92,7 +102,7 @@ MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t * task,
 
 #ifdef HAVE_TRACING
   TRACE_msg_task_get_start();
-  volatile double start_time = MSG_get_clock();
+  double start_time = MSG_get_clock();
 #endif
 
   /* Sanity check */
@@ -132,6 +142,30 @@ MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t * task,
   MSG_RETURN(ret);
 }
 
+
+
+/** \ingroup msg_mailbox_management
+ * \brief Get a task from a mailbox on a given host at a given rate
+ *
+ * \param mailbox The mailbox where the task was sent
+ * \param task a memory location for storing a #msg_task_t.
+ * \param host a #msg_host_t host from where the task was sent
+ * \param timeout a timeout
+ * \param rate a bandwidth rate
+
+ * \return Returns
+ * #MSG_OK if the task was successfully received,
+ * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE otherwise.
+ */
+msg_error_t
+MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t * task,
+                         msg_host_t host, double timeout, double rate)
+{
+       MSG_set_rate_before_read(mailbox,rate);
+       MSG_RETURN(MSG_mailbox_get_task_ext(mailbox,task,host,timeout));
+}
+
+
 msg_error_t
 MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
                              double timeout)