- 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;
-
- xbt_swag_insert(process, host->simdata->process_list);
-
- /* fix current_process, about which xbt_context_start mocks around */
- self = simix_global->current_process;