Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Cosmetic changes
[simgrid.git] / src / simix / smx_user.c
index 55f7497..c426229 100644 (file)
@@ -3,8 +3,9 @@
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix);
 
 static const char* request_names[] = {
+#undef SIMIX_REQ_ENUM_ELEMENT
 #define SIMIX_REQ_ENUM_ELEMENT(x) #x /* generate strings from the enumeration values */
-#include "smx_req_enum.h"
+SIMIX_REQ_LIST
 #undef SIMIX_REQ_ENUM_ELEMENT
 };
 
@@ -149,7 +150,8 @@ void SIMIX_req_host_set_data(smx_host_t host, void *data)
  * \return A new SIMIX execution action
  */
 smx_action_t SIMIX_req_host_execute(const char *name, smx_host_t host,
-                                double computation_amount)
+                                    double computation_amount,
+                                    double priority)
 {
   smx_req_t req = SIMIX_req_mine();
 
@@ -157,6 +159,7 @@ smx_action_t SIMIX_req_host_execute(const char *name, smx_host_t host,
   req->host_execute.name = name;
   req->host_execute.host = host;
   req->host_execute.computation_amount = computation_amount;
+  req->host_execute.priority = priority;
   SIMIX_request_push();
   return req->host_execute.result;
 }
@@ -276,24 +279,26 @@ void SIMIX_req_host_execution_set_priority(smx_action_t execution, double priori
 }
 
 /**
- * \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.
@@ -302,18 +307,18 @@ void SIMIX_req_host_execution_wait(smx_action_t execution)
  * \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;
@@ -322,7 +327,6 @@ smx_process_t SIMIX_req_process_create(const char *name,
   req->process_create.argv = argv;
   req->process_create.properties = properties;
   SIMIX_request_push();
-  return req->process_create.result;
 }
 
 /** \brief Kills a SIMIX process.
@@ -370,6 +374,8 @@ void SIMIX_req_process_change_host(smx_process_t process, const char *source, co
  */
 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;
@@ -561,12 +567,18 @@ void SIMIX_req_rdv_destroy(smx_rdv_t rdv)
 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);
 }
 
 /**
@@ -645,6 +657,9 @@ smx_action_t SIMIX_req_comm_irecv(smx_rdv_t rdv, void *dst_buff, size_t * dst_bu
 
 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;