}
/**
- * \brief Waits for the completion of an execution action.
+ * \brief Waits for the completion of an execution action and destroy it.
*
* \param execution The execution action
*/
-void SIMIX_req_host_execution_wait(smx_action_t execution)
+e_smx_state_t SIMIX_req_host_execution_wait(smx_action_t execution)
{
smx_req_t req = SIMIX_req_mine();
req->call = REQ_HOST_EXECUTION_WAIT;
req->host_execution_wait.execution = execution;
SIMIX_request_push();
+ return req->host_execution_wait.result;
}
/**
* \brief Creates and runs a new SIMIX process.
*
- * The structure and the corresponding threada are created and put in the list of ready processes.
+ * The structure and the corresponding thread are created and put in the list of ready processes.
*
+ * \param process the process created will be stored in this pointer
* \param name a name for the process. It is for user-level information and can be NULL.
* \param code the main function of the process
* \param data a pointer to any data one may want to attach to the new object. It is for user-level information and can be NULL.
* \param argc first argument passed to \a code
* \param argv second argument passed to \a code
* \param properties the properties of the process
- * \return The new process
*/
-smx_process_t SIMIX_req_process_create(const char *name,
- xbt_main_func_t code,
- void *data,
- const char *hostname,
- int argc, char **argv,
- xbt_dict_t properties)
+void SIMIX_req_process_create(smx_process_t *process, const char *name,
+ xbt_main_func_t code,
+ void *data,
+ const char *hostname,
+ int argc, char **argv,
+ xbt_dict_t properties)
{
smx_req_t req = SIMIX_req_mine();
req->call = REQ_PROCESS_CREATE;
+ req->process_create.process = process;
req->process_create.name = name;
req->process_create.code = code;
req->process_create.data = data;
req->process_create.argv = argv;
req->process_create.properties = properties;
SIMIX_request_push();
- return req->process_create.result;
}
/** \brief Kills a SIMIX process.
*/
void SIMIX_req_process_suspend(smx_process_t process)
{
+ xbt_assert0(process, "Invalid parameters");
+
smx_req_t req = SIMIX_req_mine();
req->call = REQ_PROCESS_SUSPEND;
smx_rdv_t SIMIX_req_rdv_get_by_name(const char *name)
{
xbt_assert0(name != NULL, "Invalid parameter for SIMIX_req_rdv_get_by_name (name is NULL)");
- smx_req_t req = SIMIX_req_mine();
+ /* FIXME: this is a horrible lost of performance, so we hack it out by
+ * skipping the request (for now). It won't work on distributed but
+ * probably we will change MSG for that. */
+/*
+ smx_req_t req = SIMIX_req_mine();
req->call = REQ_RDV_GEY_BY_NAME;
req->rdv_get_by_name.name = name;
SIMIX_request_push();
- return req->rdv_get_by_name.result;
+ return req->rdv_get_by_name.result;*/
+
+ return SIMIX_rdv_get_by_name(name);
}
/**
void SIMIX_req_comm_destroy(smx_action_t comm)
{
+ xbt_assert0(comm, "Invalid parameter");
+
+ /* FIXME remove this request type (auto-destroy finished comms) */
smx_req_t req = SIMIX_req_mine();
req->call = REQ_COMM_DESTROY;