Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
big fat warning to avoid an issue that Lionel encountered
[simgrid.git] / src / msg / msg_process.c
index 8c318c5..be51825 100644 (file)
@@ -146,7 +146,7 @@ msg_process_t MSG_process_create_with_arguments(const char *name,
    be retrieved with the function \ref MSG_process_get_data.
  * \param host the location where the new process is executed.
  * \param argc first argument passed to \a code
    be retrieved with the function \ref MSG_process_get_data.
  * \param host the location where the new process is executed.
  * \param argc first argument passed to \a code
- * \param argv second argument passed to \a code
+ * \param argv second argument passed to \a code. WARNING, these strings are freed by the SimGrid kernel when the process exits, so they cannot be static nor shared between several processes.
  * \param properties list a properties defined for this process
  * \see msg_process_t
  * \return The new corresponding object.
  * \param properties list a properties defined for this process
  * \see msg_process_t
  * \return The new corresponding object.
@@ -162,7 +162,6 @@ msg_process_t MSG_process_create_with_environment(const char *name,
   msg_process_t process;
 
   /* Simulator data for MSG */
   msg_process_t process;
 
   /* Simulator data for MSG */
-  simdata->PID = msg_global->PID++;
   simdata->waiting_action = NULL;
   simdata->waiting_task = NULL;
   simdata->m_host = host;
   simdata->waiting_action = NULL;
   simdata->waiting_task = NULL;
   simdata->m_host = host;
@@ -171,23 +170,17 @@ msg_process_t MSG_process_create_with_environment(const char *name,
   simdata->data = data;
   simdata->last_errno = MSG_OK;
 
   simdata->data = data;
   simdata->last_errno = MSG_OK;
 
-  if (SIMIX_process_self()) {
-    simdata->PPID = MSG_process_get_PID(MSG_process_self());
-  } else {
-    simdata->PPID = -1;
-  }
-
-#ifdef HAVE_TRACING
-  TRACE_msg_process_create(name, simdata->PID, simdata->m_host);
-#endif
   /* Let's create the process: SIMIX may decide to start it right now,
    * even before returning the flow control to us */
   /* Let's create the process: SIMIX may decide to start it right now,
    * even before returning the flow control to us */
 simcall_process_create(&process, name, code, simdata, SIMIX_host_get_name(host->smx_host), -1,
simcall_process_create(&process, name, code, simdata, sg_host_name(host), -1,
                            argc, argv, properties,0);
 
                            argc, argv, properties,0);
 
+  #ifdef HAVE_TRACING
+    TRACE_msg_process_create(name, simcall_process_get_PID(process), simdata->m_host);
+  #endif
+
   if (!process) {
     /* Undo everything we have just changed */
   if (!process) {
     /* Undo everything we have just changed */
-    msg_global->PID--;
     xbt_free(simdata);
     return NULL;
   }
     xbt_free(simdata);
     return NULL;
   }
@@ -231,7 +224,7 @@ msg_error_t MSG_process_migrate(msg_process_t process, msg_host_t host)
   msg_host_t now = simdata->m_host;
   TRACE_msg_process_change_host(process, now, host);
 #endif
   msg_host_t now = simdata->m_host;
   TRACE_msg_process_change_host(process, now, host);
 #endif
-  simcall_process_change_host(process, host->smx_host);
+  simcall_process_change_host(process, host);
   return MSG_OK;
 }
 
   return MSG_OK;
 }
 
@@ -312,6 +305,12 @@ msg_process_t MSG_process_from_PID(int PID)
 xbt_dynar_t MSG_processes_as_dynar(void) {
   return SIMIX_processes_as_dynar();
 }
 xbt_dynar_t MSG_processes_as_dynar(void) {
   return SIMIX_processes_as_dynar();
 }
+/** @brief Return the current number MSG processes.
+ */
+int MSG_process_get_number(void)
+{
+  return SIMIX_process_count();
+}
 
 /** \ingroup m_process_management
  * \brief Set the kill time of a process.
 
 /** \ingroup m_process_management
  * \brief Set the kill time of a process.
@@ -338,10 +337,7 @@ int MSG_process_get_PID(msg_process_t process)
   if (process == NULL) {
     return 0;
   }
   if (process == NULL) {
     return 0;
   }
-
-  simdata_process_t simdata = simcall_process_get_data(process);
-
-  return simdata != NULL ? simdata->PID : 0;
+  return simcall_process_get_PID(process);
 }
 
 /** \ingroup m_process_management
 }
 
 /** \ingroup m_process_management
@@ -355,9 +351,7 @@ int MSG_process_get_PPID(msg_process_t process)
 {
   xbt_assert(process != NULL, "Invalid parameter");
 
 {
   xbt_assert(process != NULL, "Invalid parameter");
 
-  simdata_process_t simdata = simcall_process_get_data(process);
-
-  return simdata->PPID;
+  return simcall_process_get_PPID(process);
 }
 
 /** \ingroup m_process_management
 }
 
 /** \ingroup m_process_management