XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_gos, msg,
"Logging specific to MSG (gos)");
-/** \ingroup msg_gos_functions
- *
- * \brief Return the last value returned by a MSG function (except
- * MSG_get_errno...).
- */
-MSG_error_t MSG_get_errno(void)
-{
- return PROCESS_GET_ERRNO();
-}
-
/** \ingroup msg_gos_functions
* \brief Executes a task and waits for its termination.
*
* takes only one parameter.
* \param task a #m_task_t to execute on the location on which the
agent is running.
- * \return #MSG_FATAL if \a task is not properly initialized and
- * #MSG_OK otherwise.
+ * \return #MSG_OK if the task was successfully completed, #MSG_TASK_CANCELED
+ * or #MSG_HOST_FAILURE otherwise
*/
MSG_error_t MSG_task_execute(m_task_t task)
{
#endif
return MSG_OK;
}
+
+ m_process_t self = SIMIX_process_self();
+ p_simdata = SIMIX_process_self_get_data(self);
simdata->isused=1;
simdata->compute =
- SIMIX_req_host_execute(task->name, SIMIX_host_self(),
+ SIMIX_req_host_execute(task->name, p_simdata->m_host->simdata->smx_host,
simdata->computation_amount,
simdata->priority);
#ifdef HAVE_TRACING
SIMIX_req_set_category(simdata->compute, task->category);
#endif
- p_simdata = SIMIX_process_self_get_data();
p_simdata->waiting_action = simdata->compute;
comp_state = SIMIX_req_host_execution_wait(simdata->compute);
p_simdata->waiting_action = NULL;
#ifdef HAVE_TRACING
TRACE_msg_task_execute_end(task);
#endif
- MSG_RETURN(MSG_TASK_CANCELLED);
+ MSG_RETURN(MSG_TASK_CANCELED);
}
}
CHECK_HOST();
simdata = task->simdata;
- p_simdata = SIMIX_process_self_get_data();
+ p_simdata = SIMIX_process_self_get_data(SIMIX_process_self());
xbt_assert((!simdata->compute)
&& (task->simdata->isused == 0),
/* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */
simdata->comm = NULL;
simdata->compute = NULL;
- MSG_RETURN(MSG_TASK_CANCELLED);
+ MSG_RETURN(MSG_TASK_CANCELED);
}
}
{
return MSG_task_isend_with_matching(task,alias,NULL,NULL);
}
+
/** \ingroup msg_gos_functions
* \brief Sends a task on a mailbox, with support for matching requests
*
/* Prepare the task to send */
t_simdata = task->simdata;
t_simdata->sender = process;
- t_simdata->source = MSG_host_self();
+ t_simdata->source = ((simdata_process_t) SIMIX_process_self_get_data(process))->m_host;
xbt_assert(t_simdata->isused == 0,
"This task is still being used somewhere else. You cannot send it now. Go fix your code!");
/* Prepare the task to send */
t_simdata = task->simdata;
t_simdata->sender = process;
- t_simdata->source = MSG_host_self();
+ t_simdata->source = ((simdata_process_t) SIMIX_process_self_get_data(process))->m_host;
xbt_assert(t_simdata->isused == 0,
"This task is still being used somewhere else. You cannot send it now. Go fix your code!");
msg_global->sent_msg++;
/* Send it by calling SIMIX network layer */
- SIMIX_req_comm_isend(mailbox, t_simdata->message_size,
+ smx_action_t comm = SIMIX_req_comm_isend(mailbox, t_simdata->message_size,
t_simdata->rate, task, sizeof(void *), NULL, cleanup, 1);
+ t_simdata->comm = comm;
}
/** \ingroup msg_gos_functions
int finished = 0;
TRY {
finished = SIMIX_req_comm_test(comm->s_comm);
+
+ if (finished && comm->task_received != NULL) {
+ /* I am the receiver */
+ (*comm->task_received)->simdata->isused = 0;
+ }
}
CATCH(e) {
switch (e.category) {
comm = xbt_dynar_get_as(comms, finished_index, msg_comm_t);
/* the communication is finished */
comm->status = status;
+
+ if (status == MSG_OK && comm->task_received != NULL) {
+ /* I am the receiver */
+ (*comm->task_received)->simdata->isused = 0;
+ }
}
return finished_index;
return MSG_process_get_PID(task->simdata->sender);
}
+
+#ifdef MSG_USE_DEPRECATED
+/** \ingroup msg_gos_functions
+ *
+ * \brief Return the last value returned by a MSG function (except
+ * MSG_get_errno...).
+ */
+MSG_error_t MSG_get_errno(void)
+{
+ return PROCESS_GET_ERRNO();
+}
+#endif