-void SIMIX_jprocess_create(const char *name, smx_host_t host,
- void *data,
- void *jprocess, void *jenv, smx_process_t * res)
-{
- smx_simdata_process_t simdata = xbt_new0(s_smx_simdata_process_t, 1);
- smx_process_t process = xbt_new0(s_smx_process_t, 1);
- smx_process_t self = NULL;
-
- /* HACK: We need this trick because when we xbt_context_new() do
- syncronization stuff, the s_process field in the m_process needs
- to have a valid value, and we call xbt_context_new() before
- returning, of course, ie, before providing a right value to the
- caller (Java_simgrid_msg_Msg_processCreate) have time to store it
- in place. This way, we initialize the m_process->simdata->s_process
- field ourself ASAP.
-
- All this would be much simpler if the synchronization stuff would be done
- in the JAVA world, I think.
- */
- *res = process;
-
-
-
- DEBUG5("jprocess_create(name=%s,host=%p,data=%p,jproc=%p,jenv=%p)",
- name, host, data, jprocess, jenv);
- xbt_assert0(host, "Invalid parameters");
- /* Simulator Data */
- simdata->smx_host = host;
- simdata->mutex = NULL;
- simdata->cond = NULL;
- simdata->argc = 0;
- simdata->argv = NULL;
-
-
- simdata->context = xbt_context_new(name, NULL, NULL, jprocess,
- simix_global->cleanup_process_function,
- process,
- /* argc/argv */ 0, NULL);
-
- /* Process structure */
- process->name = xbt_strdup(name);
- process->simdata = simdata;
- process->data = data;
+void SIMIX_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) {
+
+ *process = NULL;
+ smx_host_t host = SIMIX_host_get_by_name(hostname);
+
+ XBT_DEBUG("Start process %s on host %s", name, hostname);
+
+ if (!SIMIX_host_get_state(host)) {
+ XBT_WARN("Cannot launch process '%s' on failed host '%s'", name,
+ hostname);
+ }
+ else {
+ *process = xbt_new0(s_smx_process_t, 1);
+
+ xbt_assert(((code != NULL) && (host != NULL)), "Invalid parameters");
+
+ /* Process data */
+ (*process)->pid = simix_process_maxpid++;
+ (*process)->name = xbt_strdup(name);
+ (*process)->smx_host = host;
+ (*process)->data = data;
+ (*process)->comms = xbt_fifo_new();